若排版有错误,请查看PDF版:http://pan.baidu.com/s/1dDnHmDz
一、 NSDictionary、NSMutableDictionary
1. 字典
key----> value
索引 ----> 文字内容
1) 字典里面存储的东西都是键值对
2) 字典不允许有相同的key,但允许有相同的value(Object)
3) 字典是无序的
2. NSDictionary(不可变字典)的创建
1) 方法1:
NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];
2) 方法2:
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];
3) 方法3:
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京",@"address",
@"32423434", @"qq", nil];
4) 方法4:(常用)
NSDictionary *dict = @{@"name" :@"jack", @"address" :@"北京"};
3. NSMutableDictionary(可变字典)的创建
NSMutableDictionary *dict =[NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
// 移除键值对
[dictremoveObjectForKey:<#(id)#>];
4. 取出字典里的内容
id obj = [dict objectForKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%ld", dict.count); // 返回的是键值对的个数
5. 遍历字典
NSDictionary *dict = @{
@"address" :@"北京",
@"name" :@"jack",
@"name2" :@"jack",
@"name3" :@"jack",
@"qq" :@"7657567765"
};
1) 方法1:
NSArray *keys = [dict allKeys];
for (int i =0; i<dict.count; i++)
{
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ = %@", key, object);
}
2) 方法2:(常用)
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
// *stop = YES; 停止遍历
}];
6. 数组与字典嵌套
NSArray *persons = @[
@{@"name" :@"jack", @"qq" :@"432423423", @"books":@[@"5分钟突破iOS编程",@"5分钟突破android编程"]},
@{@"name" :@"rose", @"qq" :@"767567"},
@{@"name" :@"jim", @"qq" :@"423423"},
@{@"name" :@"jake", @"qq" :@"123123213"}
];
NSDictionary *jim = persons[2];
NSString *bookName =persons[0][@"books"][1];// 先取出0位置对应的字典,再取出字典中books这个key对应的数据,再取出元素
NSArray *array = persons[0][@"books"];
NSLog(@"%@", persons[1][@"qq"]);
二、 NSNumber
1. 将各种基本数据类型包装成NSNumber对象
NSArray *array = @[
@{@"name" :@"jack", @"age" :@20},
@{@"name" :@"rose", @"age" :@25},
@{@"name" :@"jim", @"age" :@27}
]
@10.5;
@20;
@YES;
@'A'; // NSNumber对象
@"A"; // NSString对象
2. 将age变量包装成NSNumber对象
int age = 100;
@(age);
//[NSNumbernumberWithInt:age];
NSNumber *n = [NSNumbernumberWithDouble:10.5];
3. 将对象转成基本数据类型
int d = [n doubleValue];
NSLog(@"%d, %@", d, n);// 10, 10.5
int a = 20;
// @"20"
NSString *str = [NSStringstringWithFormat:@"%d", a];
NSLog(@"%d", [strintValue]); // 20
三、 NSDate
1. 创建一个时间对象
NSDate *date1 = [NSDatedate];
NSLog(@"%@", date1);// 2014-08-24 10:59:08 +0000打印出的时候是0时区的时间(北京-东8区)
NSDate *date2 = [NSDatedateWithTimeInterval:5sinceDate:date1];
NSLog(@"%@", date2);// 2014-08-24 10:59:13+0000
// 从1970开始走过的秒数
NSTimeInterval seconds = [date1timeIntervalSince1970];
NSLog(@"%f", seconds);// 1408877948.974812
2. 将NSDate换成字符串输出,时间为北京时间
// 日期格式化类
NSDateFormatter *formatter1 = [[NSDateFormatteralloc] init];
formatter1.dateFormat = @"yyyy-MM-ddHH:mm:ss"; // y年 M月 d日 H(24)时 h(12)时 m分 s秒
NSString *str = [formatter1stringFromDate:date1]; // 将NSDate换成字符串输出
NSLog(@"%@", str);// 2014-08-24 18:59:08
3. 将字符串转换成NSDate输出
NSString *time = @"2011/09/1018:56";
NSDateFormatter *formatter2 = [[NSDateFormatteralloc] init];
formatter2.dateFormat = @"yyyy/MM/ddHH:mm"; // 格式要和time相同,否则nill
NSDate *date3 = [formatter2dateFromString:time];
NSLog(@"%@", date3);// 2011-09-10 10:56:00+0000
四、 NSValue
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
1. 将结构体装成OC对象
// 将结构体转为Value对象
CGPoint p = CGPointMake(10, 10);
NSValue *value = [NSValuevalueWithPoint:p];
NSLog(@"%@", value);// NSPoint: {10, 10}
// 将value转为对应的结构体
CGPoint p2 = [value pointValue];
2. 将对象存入数组
NSArray *array = @[value];
NSLog(@"%@", array);// ("NSPoint: {10,10}")