黑马程序员-10Foundation框架(下)
2015-01-21 19:04
495 查看
------- <a href="http://www.itheima.com" target="blank">ios培训</a>、<a href="http://www.itheima.com" target="blank">ios培训</a>、期待与您交流! ----------
(2)NSMutableArray
NSMutableArray是可变的数组,它继承自NSArray。
NSMutableArray常用的操作有:
创建一个可变数组:要以nil结束
向数组中添加元素:
注意不能添加nil值的元素,因为nil是数组结束的标识。
删除所有元素
删除最后一个元素
删除指定的对象
按照索引删除元素:
注意:@[] 只创建不可变数组 ,
例如:
右边产生了一个NSArray对象,因此会产生类型不匹配的警告:
NSSet和NSMutableSet
(1)NSSet
NSSet也是一种集合类,
它与NSArray最大的区别就是:
NSArray中的元素是有顺序的,因此NSArray中有索引的概念
NSSet中的元素是没有顺序的。
创建一个NSSet:
取出一个元素:
随机拿出一个元素
(2)NSMutableSet
创建NSMutableSet对象
添加元素
删除元素
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
NSDictionary和NSMutableDictionary
①NSDictionary常被成为字典,存的都是键值对(不可变)。
字典
key ----> value
索引 ----> 文字内容
创建一个NSDictionary对象
键值对key:@"name":@"jack"
方法一:
方式二:
有多个键值对时,可以用两个数组分别存放keys和values,
dafc
利用方法:dictionaryWithObjects: forKeys:
示例
方式三:
利用Xcode编译器特性,快速创建:@{}
示例;
取出一个元素
利用编译器特性,取出元素:对象名[key]
返回键值对的个数对象名.count
注意:
字典不允许有相同的key,但允许有相同的value(Object)
典的无序的
②NSMutableDictionary(可变)
创建一个NSMutableDictionary:
添加键值对:setObject方法
// 添加键值对
注意:给存在的key赋值,旧值被覆盖
// 给相同的key赋值时 旧值会覆盖
移除键值对:
数组和字典的打印:
输出的结果是:
@{}创建的时不可变的字典
NSDictionary 的遍历
方法一:比较繁琐,依次取出key和value
方法二:利用block
字典的数组
取出其中的某个字典
先取出1位置对应的字典,再取出字典中qq这个key对应的数据
对集合的总结:
集合:
1.NSArray\NSMutableArray
*有序
*快速创建(不可变):@[obj1, obj2, obj3];
*快速访问元素:数组名[i]
2.NSSet\NSMutableSet
*无序
*无快速创建的方法
3.NSDictionary\NSMutableDictionary
*无序
*快速创建(不可变):@{key1;value1, key2:value2};
*快速访问元素:字典名[key];
NSNumber和NSValue
使用NSNumber和NSValue来包装基本数据类型,让它们转换为对象类型的数据。
①NSNumber
将BOOL、char、int、float、double、NSInteger类型的数据包装成NSNumber类型的对象
示例
将对象转成基本类型
将基本类型转成字符串
将字符串转成基本类型
利用编译器特性:
不仅仅如此,还可以这样包装数据:
将age变量包装成NSNumber
对NSNumber类型的分析:
NSNumber之所以能包装数据,是因为继承了NSValue ,
NSNumber只能包装数字类型,若要包装结构体就得使用NSValue。
使用NSValue将结构体包装成NSValue类型的OC对象:
将结构体包装成OC对象
// 将结构体转为NSValue
将value转为对应的结构体
NSDate类
创建一个时间对象:当前时间
打印时间:
NSLog(@"%@", date);//打印的为0时区时间(北京-东8区)
创建一个时间对象:比date晚5秒钟
获取从1970年1月1日凌晨走过的秒数:
获取date与当前时间的间隔:单位:秒
日期格式化类的使用:
使用一:将date对象转为字符串:
使用二:将字符串转为日期:
(2)NSMutableArray
NSMutableArray是可变的数组,它继承自NSArray。
NSMutableArray常用的操作有:
创建一个可变数组:要以nil结束
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil ];
向数组中添加元素:
NSMutableArray *array = [NSMutableArray array]; [array addObject:[[Person alloc] init]]; [array addObject:@"jack"];
注意不能添加nil值的元素,因为nil是数组结束的标识。
[array addObject:nil]; // 错误写法
删除所有元素
[array removeAllObjects];
删除最后一个元素
[array removeLastObject];
删除指定的对象
[array removeObject:@"jack"];
按照索引删除元素:
[array removeObjectAtIndex:0];
注意:@[] 只创建不可变数组 ,
例如:
NSMutableArray *array = @[@"jack", @"rose"]; //错误写法
右边产生了一个NSArray对象,因此会产生类型不匹配的警告:
Incompatible pointer types initializing 'NSMutableArray *' with an expression of type 'NSArray *'
NSSet和NSMutableSet
(1)NSSet
NSSet也是一种集合类,
它与NSArray最大的区别就是:
NSArray中的元素是有顺序的,因此NSArray中有索引的概念
NSSet中的元素是没有顺序的。
创建一个NSSet:
NSSet *s = [NSSet set]; // 永远为空的NSSet NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
取出一个元素:
随机拿出一个元素
NSString *str = [s2 anyObject]; NSLog(@"%@", str);
(2)NSMutableSet
创建NSMutableSet对象
NSMutableSet *s = [NSmutableSet set];
添加元素
[s addObject:@"hack"];
删除元素
[s removeObject:(id)]; //删除特定元素 [s removeAllObject];//删除所有元素
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
NSDictionary和NSMutableDictionary
①NSDictionary常被成为字典,存的都是键值对(不可变)。
字典
key ----> value
索引 ----> 文字内容
创建一个NSDictionary对象
键值对key:@"name":@"jack"
方法一:
方法:dictionaryWithObject: forKey: NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
方式二:
有多个键值对时,可以用两个数组分别存放keys和values,
dafc
利用方法:dictionaryWithObjects: forKeys:
示例
NSArray *keys = @[@"name", @"address"]; NSArray *objs = @[@"jack", @"北京"]; NSDictionary *dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
方式三:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"jack", @"name", @"北京", @"address", @"123456", @"QQ", nil nil]; // 注意添加结束标识nil
利用Xcode编译器特性,快速创建:@{}
示例;
NSDictionary *dict = @{@"name":@"jack", @"address":@"北京"};
取出一个元素
id obj = [dict objectForKey:@“name”];//取出name对应的值 NSLog(@"%@", obj); // jack
利用编译器特性,取出元素:对象名[key]
obj = dict[@“name”]; NSLog(@"%@", obj); // jack
返回键值对的个数对象名.count
NSLog(@"%ld", dict.count);
注意:
字典不允许有相同的key,但允许有相同的value(Object)
典的无序的
②NSMutableDictionary(可变)
创建一个NSMutableDictionary:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
添加键值对:setObject方法
// 添加键值对
[dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"北京" forKey:@"address"];
注意:给存在的key赋值,旧值被覆盖
// 给相同的key赋值时 旧值会覆盖
[dict setObject:@"rose" forKey:@"name"]; //此时的name为rose;
移除键值对:
[dict removeObjectsForKeys:@"name"];
数组和字典的打印:
NSLog(@"%@", @[@"jack",@"rose"]); // 数组 NSLog(@“%@“,dict}); //字典
输出的结果是:
( jack, rose ) { address = "\U5317\U4eac"; name = jack; }
@{}创建的时不可变的字典
//错误写法 NSMutableDictionary *dict = @{@"name":@"jack"};
NSDictionary 的遍历
NSDictionary *dict = @{@"name":@"jack", @"address":@"北京", @“qq”:@“888888”};
方法一:比较繁琐,依次取出key和value
NSArray *keys = [dict allKeys]; for (int i = 0; i < dict.count; i++) { id key = keys[i]; id obj = dict[key]; NSLog(@"%@ = %@", key, obj); }
方法二:利用block
int i = 0; [dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@", key, obj); /*可以停止打印 if(i == 1) {*stop = YES;} */ }];
字典的数组
NSArray *persons = @[ @{@"name" : @"jack", @"qq" : @"432423423",}, @{@"name" : @"rose", @"qq" : @"767567"}, @{@"name" : @"jim", @"qq" : @"423423"}, @{@"name" : @"jake", @"qq" : @"123123213"} ];
取出其中的某个字典
NSDictionary *jim = persons[2]; NSLof(@“%@”,jim);
先取出1位置对应的字典,再取出字典中qq这个key对应的数据
NSLog(@"%@", persons[1][@"qq"]);
对集合的总结:
集合:
1.NSArray\NSMutableArray
*有序
*快速创建(不可变):@[obj1, obj2, obj3];
*快速访问元素:数组名[i]
2.NSSet\NSMutableSet
*无序
*无快速创建的方法
3.NSDictionary\NSMutableDictionary
*无序
*快速创建(不可变):@{key1;value1, key2:value2};
*快速访问元素:字典名[key];
NSNumber和NSValue
使用NSNumber和NSValue来包装基本数据类型,让它们转换为对象类型的数据。
①NSNumber
将BOOL、char、int、float、double、NSInteger类型的数据包装成NSNumber类型的对象
示例
NSNumber *c = [NSNumber numberWithChar:'A']; NSNumber *i = [NSNumber numberWithInt:10];
将对象转成基本类型
[c charValue]; [i intValue];
将基本类型转成字符串
NSString *str = [NSString stringWithFormat:@“%d”,a]
将字符串转成基本类型
[str intValue];
利用编译器特性:
NSNumber *c = @'A'; // 将A包装成对象 NSNumber *i = @10; // 将10包装成对象
不仅仅如此,还可以这样包装数据:
将age变量包装成NSNumber
int age = 10; NSNumber *na = @(age);
对NSNumber类型的分析:
NSNumber之所以能包装数据,是因为继承了NSValue ,
NSNumber只能包装数字类型,若要包装结构体就得使用NSValue。
使用NSValue将结构体包装成NSValue类型的OC对象:
将结构体包装成OC对象
CGPoint p = CGPointMake(10, 10); <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
// 将结构体转为NSValue
NSValue *value = [NSValue valueWithPoint:p];
将value转为对应的结构体
[value pointValue];
NSDate类
创建一个时间对象:当前时间
NSDate *date = [NSDate date]; // 默认依据当前时间 <span style="font-family: 宋体; background-color: rgb(255, 255, 255);"> </span>
打印时间:
NSLog(@"%@", date);//打印的为0时区时间(北京-东8区)
创建一个时间对象:比date晚5秒钟
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
获取从1970年1月1日凌晨走过的秒数:
NSTimeInterval seconds = [date2 timeIntervalSince1970]; // 为double类型
获取date与当前时间的间隔:单位:秒
[date2 timeIntervalSinceNow];
日期格式化类的使用:
使用一:将date对象转为字符串:
void dateToString() { NSDate *date = [NSDate date]; // 日期格式化类 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // H(24小时制) h(12小时制) // y 年 M 月 d 日 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *strDate = [formatter stringFromDate:date]; NSLog(@"%@", strDate); }
使用二:将字符串转为日期:
void stringToDate() { NSString *time = @"2011/09/10 18:56"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy/MM/dd HH:mm"; NSDate *date = [formatter dateFromString:time]; NSLog(@"%@", date); }
相关文章推荐
- 黑马程序员_API集合框架
- 黑马程序员——JAVA基础------集合框架(四)----Map集合
- 黑马程序员_模拟Spring可配置的AOP框架
- 黑马程序员——Java基础—集合框架(二)
- 黑马程序员——Java基础—集合框架(四)
- 黑马程序员——foundation框架之结构体
- 黑马程序员——集合框架(Collection)
- 黑马程序员_集合框架(上)-单列集合类
- 黑马程序员——IOS学习笔记(Foundation框架(二))
- 黑马程序员 OC框架: Foundation
- 黑马程序员java学习日记——集合框架
- 黑马程序员--集合框架(2)
- 黑马程序员——OC中Foundation框架
- 黑马程序员——Foundation框架——包装类以及NSDate
- 黑马程序员——05集合框架
- 黑马程序员_学习笔记框架(II)及工具类
- 黑马程序员_Java基础_集合框架(三)_16
- 黑马程序员——集合框架Map
- 黑马程序员——OCFoundation框架-9:计算某个文件夹下的代码行数