IOS开发之OC基础学习笔记(下) 原创
<p></p><div class="toc">
<h4>文章目录</h4>
<ul><li><ul><li><ul><li>1. Foundation-NSDictionary</li><li><ul><li>字典的初始化:</li><li>字典的基本用法:</li><li>遍历字典的所有key或者value:</li><li>字典的内存管理:</li></ul>
</li><li>2. Foundation-NSMUtableDictonary</li><li>3. Foundation-NSNumber</li><li>4. Foundation-NSValue</li><li>5. Foundation-NSNull</li><li>6. Foundation-NSDate</li><li><ul><li>日期创建</li><li>日期使用</li><li>日期格式化</li></ul>
</li><li>7. Foundation-NSObject</li><li><ul><li>NSObject使用</li><li>反射的使用</li></ul>
</li></ul>
</li></ul>
</li></ul>
</div>
<p></p>
<blockquote>
<ul><li>该笔记源自对传智播客《IOS开发快速入门视频》的学习</li><li>如有侵权,请联系本人删除。</li><li>都是比较基础的OC知识,中高级开发者可以忽略本文</li><li>很多重要内容在代码注释中</li></ul>
</blockquote>
<h4>1. Foundation-NSDictionary</h4>
<h5>字典的初始化:</h5>
<pre><code> // NSDictionary是不可变的
NSDictionary *dict = ;
//{k = v;}
// 最常用的初始化方式
dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"v1", @"k1",
@"v2", @"k2",
@"v3", @"k3", nil];
NSArray *objects = ;
NSArray *keys = ;
dict = ;
// {k1 = v1;k2 = v2;k3 = v3;}
NSLog(@"%@", dict);
</code></pre>
<h5>字典的基本用法:</h5>
<ul><li> <p>有多少个键值对(key-value)<br> <code>dict.count</code></p> </li><li> <p>由于NSDictionary是不可变的,所以只能取值,而不能修改值<br> <code>id obj = ;</code></p> </li><li> <p>将字典写入文件中<br> <code>NSString *path = @"/Users/apple/Desktop/dict.xml"; ;</code></p> </li><li> <p>从文件中读取内容<br> <code>dict = ;</code></p> </li><li> <p>返回所有的key或者value<br> <code>NSArray *keys = ;</code><br> <code>NSArray *objects = ;</code></p> </li><li> <p>根据多个key取出对应的多个value<br> 当key找不到对应的value时,用marker参数值代替<br> <code>objects = notFoundMarker:@"not-found"];</code><br> 结果:objects= (v1,v2,“not-found”)</p> </li></ul>
<h5>遍历字典的所有key或者value:</h5>
<pre><code>//方法一 for循环
for (id key in dict) {
id value = ;
NSLog(@"%@=%@", key, value);
}
</code></pre>
<pre><code>//方法二 key迭代器
NSEnumerator *enumer = ;
id key = nil;
while ( key = ) {
id value = ;
NSLog(@"%@=%@", key, value);
}
//k3=v3 k2=v2 k1=v1
for (NSObject *object in ) {
NSLog(@"对象迭代器遍历的值: %@",object);
}
//v3 v2 v1
</code></pre>
<pre><code>//方法三 use block
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@=%@", key, obj);
}];
</code></pre>
<h5>字典的内存管理:</h5>
<pre><code>Student *stu1 = ;
Student *stu2 = ;
Student *stu3 = ;
// 一个对象称为字典的key或者value时,会做一次retain操作,也就是计数器会+1
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
stu1, @"k1",
stu2, @"k2",
stu3, @"k3", nil];
// 当字典被销毁时,里面的所有key和value都会做一次release操作,也就是计数器会-1
</code></pre>
<h4>2. Foundation-NSMUtableDictonary</h4>
<p>可变字典的使用</p>
<pre><code>// 创建一个空的字典
NSMutableDictionary *dict = ;
Student *stu1 = ;
Student *stu2= ;
// 添加元素
// stu1的计数器会+1
;
NSLog(@"stu1:%zi", );
// 添加其他字典other到当前字典dict中
NSDictionary *other = ;
;
// 删除所有的键值对
// ;
// 删除k1对应的元素stu1,stu1会做一次release操作
;
NSLog(@"stu1:%zi", );
// 删除多个key对应的value
// ];
// 字典被销毁时,内部的所有key和value计数器都会-1,也就是说stu1会release一次
</code></pre>
<h4>3. Foundation-NSNumber</h4>
<pre><code>// 将int类型的10 包装成 一个NSNumber对象
NSNumber *number = ;
NSLog(@"number=%@", number);
// 添加数值到数组中
NSMutableArray *array = ;
;
// 取出来还是一个NSNumber对象,不支持自动解包(也就是不会自动转化为int类型)
NSNumber *number1 = ;
// 将NSNumber转化成int类型
int num = ;
NSLog(@"num=%i", num);
</code></pre>
<h4>4. Foundation-NSValue</h4>
<p>将结构体变量包装成一个对象</p>
<pre><code>CGPoint point = CGPointMake(10, 10);
NSValue *value = ;
NSMutableArray *array = ;
;// 添加value
// 取出当时放进去的value
NSValue *value1 = ;
CGPoint point1 = ;
BOOL result = CGPointEqualToPoint(point1, point);
</code></pre>
<pre><code>typedef struct {
int year;
int month;
int day;
} Date;
void value2() {
Date date = {2013, 4, 7};
// 这里要传结构体的地址&date
// 根据结构体类型生成 对应的 类型描述字符串
char *type = @encode(Date);
NSValue *value = ;
Date date1;// 定义一个结构体变量
;// 取出包装好的结构体
// ;取出类型描述字符串
NSLog(@"year=%i, month=%i, day=%i", date1.year, date1.month, date1.day);
//year=2013, month=4, day=7
}
</code></pre>
<h4>5. Foundation-NSNull</h4>
<pre><code>// 返回的是同一个单粒对象
NSNull *n = ;
NSNull *n1 = ;
NSLog(@"%i", n == n1);//1
</code></pre>
<h4>6. Foundation-NSDate</h4>
<h5>日期创建</h5>
<pre><code>// date方法返回的就是当前时间(now)
NSDate *date = ;
NSLog(@"11:%@", date);//11:2016-04-06 14:42:19 +0000
// now:11:12:40
// date: 11:12:50
date = ;
NSLog(@"22:%@", date);//22:2016-04-06 14:42:29 +0000
// 从1970-1-1 00:00:00开始
date = ;
NSLog(@"33:%@", date);//33:1970-01-01 00:00:10 +0000
// 随机返回一个比较遥远的未来时间
date = ;
NSLog(@"44:%@", date);//44:4001-01-01 00:00:00 +0000
// 随机返回一个比较遥远的过去时间
date = ;
NSLog(@"55:%@", date);//55:0000-12-30 00:00:00 +0000
</code></pre>
<h5>日期使用</h5>
<pre><code>NSDate *date = ;
// 返回1970-1-1开始走过的毫秒数
NSTimeInterval interval = ;
NSLog(@"interval = %f",interval);//1459954262.860866
NSDate *date2 = ;
// 返回比较早的那个时间
NSLog(@"%@",);//2016-04-06 14:51:02 +0000
// 返回比较晚的那个时间
NSLog(@"%@",);//2016-04-06 14:51:02 +0000
// 跟其他时间进行对比
interval =;
NSLog(@"interval = %f",interval);//0.001233
</code></pre>
<h5>日期格式化</h5>
<pre><code>NSDate *date = ;
NSDateFormatter *formatter = [ init];
// HH是24进制,hh是12进制
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
//修正stringFromDate时区差异
//formatter.locale = [[ initWithLocaleIdentifier:@"zh_CN"] autorelease];
NSString *string = ;
NSLog(@"%@", string);
// 返回的格林治时间
NSDate *date2 = ;
NSLog(@"%@", date2);//2010-09-09 05:14:56 +0000
;
</code></pre>
<h4>7. Foundation-NSObject</h4>
<h5>NSObject使用</h5>
<ul><li>isKindOfClass判断对象是否属于某个类 或者 子类<br> <code>if ( ] ) { // NSLog(@"stu属于Person或者继承自Person");}</code></li><li>isMemberOfClass判断对象是否属于某个类(不包括子类)<br> <code>BOOL result = ];</code></li><li>直接调用<br> <code>;</code></li><li>间接调用<br> <code>;</code><br> <code>;</code></li><li>延迟2秒后调用test2:方法<br> <code>;</code></li></ul>
<h5>反射的使用</h5>
<pre><code>// 类的反射
NSString *str = @"Person";
Class class = NSClassFromString(str);
Person *person = [ init];
NSLog(@"%@", person);//<Person: 0x100300320>
// Class变成字符串
NSString *name =NSStringFromClass();
NSLog(@"%@", name);//Person
// 方法的反射
NSString *method = @"test";
SEL selector = NSSelectorFromString(method);
;//调用了Person的test方法
// 将SEL转换为字符串
NSString *selectorName = NSStringFromSelector(selector);
NSLog(@"%@", selectorName);//test
;
</code></pre>
<p>IOS开发之OC基础学习笔记(上)<br> IOS开发之OC基础学习笔记(中)<br> IOS开发之OC基础学习笔记(下)</p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:清霜辰,转载请注明原文链接:https://www.cnblogs.com/cnjim/p/18443519</p><br><br>
来源:https://www.cnblogs.com/cnjim/p/18443519
頁:
[1]