集合类:可以装很多东西的类,NSArray、NSSet、NSDictionary都属于集合类。
NSArray:不可变OC数组
1> OC数组只能存放OC对象;
2> NSArray的创建
3> 计算数组中元素个数:[数组名 count];NSArray *array = [NSArray array];//创建出来的array永远是空数组。 NSArray *array2 = [NSArray arrayWithObject:@"whbsspu"];// 这个数组只能存放一个OC对象; NSArray *array3 = [NSArray arrayWithObject:@"whbsspu",@"age is 23",nil];//把nil前面的所有东西都当做数组元素,nil不能省略。 NSArray *array4 = @[@"whbsspu",@"jack",@"rose"];// 快速创建一个NSArray对象,只要是数组元素都可以放进去,@[]返回值是NSArray是不可变数组。
eg:[array3 count];
4> 访问数组内部的元素
eg:
array3[1];
[array objectAatIndex:1];(不常用)
5> 数组遍历
NSMutableArray:可变数组int main() { Person *p = [[Person alloc]init]; NSArray *array = @[p,@"whbsspu",@"jsck"]; //方法1:for循环 for(int i=0;i<array.count;i++) { NSLog(@"%@",array[i]); } // 方法2:快速遍历 for(id obj in array)//其中id obj代表着数组里面的每一个元素。这句代码的作用是找出obj在数组中的位置。 { NSLog(@"%@",obj); } //方法3:遍历每一次元素就调用一次block,并且把当前元素和索引位置当做参数传给block。 [array enumerateObjectUsingBlock: ^(id obj,NSUInteger idx,Bool *stop) { NSLog(@"%ld,%@",idx,obj); //if( idx = 0){*stop = YES;}跳出循环。 } ]; }
1> 可变数组的创建
注意错误写法:NSMutableArray *array = [NSMutableArray array];//空数组。 NSMutableArray *array2 = [NSMutableArray arrayWithObject:@"whbsspu",@"jack",nil];
[NSMutableArray *array = @[@"whbsspu",@"jsck"];//这种写法只能用于不可变数组的创建。
2> 添加元素
3> 删除元素[array addObject:[[Person alloc]init]]; [array addObject:@"whbsspu1"];
4> 打印数组[array removeAllObjects];//删除所有数组元素。 [array removeObject:@"whbsspu"]; [array removeObjectAtIndex:0]//删除0位置上的元素
NSSet:无序存放对象,不可变NSLog(@"%@",array); NSLog("%ld",array.count);
NSMutableSet:无序存放对象,可变int main() { NSSet *s = [NSSet set];//创建一个空的eset; NSSet *s1= [NSSet setWithObject:@"whbsspu",@"jsck",nil]; NSString *str = [s1 anyObject];//随机取出任何一个元素。 NSLog(@“&@”,str); NSLog("%ld",s1.count); }
NSSet和NSArray的对比int main() { NSMutableSet *s = [NSMutableSet set]; [s addObject:@"whbsspu"];//添加元素; [s removeObject:(id)];//删除元素 }
相同点:
1> 都是集合,都能存放多个OC对象;
2> 只能存放对象,不能存放非OC对象类型;
3> 本身都不可变,但都有一个可变的子类。不同点:
NSArray是有顺序的,NSSet是无序的。NSDictionary(字典)
1> 字典里存放的都是键值对(key——>value),且没有顺序。
eg:
2> 创建多对索引NSDictionary *dic = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];//根据索引keyname可以找到Jack这个值。 id obj = [dic objectForKey:@"name"];//取出字典里的值。
3> 快速创建NSArray *keys = @[@"name",@"address"]; NSArray *objects = @[@"whbsspu",@"上海"]; NSDictionary *dict = [NSDictionary dictionaryWithObject:objects forkeys:keys]; id obj = [dict objectForKey:@"name"];//输出whbsspu
4> dict.count 返回的是键值对的个数。NSDictionary *dict = @[@"name":@"whbsspu",@"address":@"上海"]; //访问 id obj = dict[@"name"]; NSLog(@"%@",obj);//输出whbsspu
NSMutableDictionary:可变字典
1> 移除键值对:[dic removeObjectForKey:(id)];NSMutableDictionary *dict = [NSMutableDictionary dictionary]; //添加键值对 [dic SetObject:@"whbsspu"forkey:@"name"]; [dic setObject:@"上海"forkey:@"address"]; /* 注意:1>字典里面的数据没有顺序之分; 2>如果再增加一条: [dic setobject"@"jack" forKey:@"name"];则会将之前的whbsspu覆盖掉,因为字典里面不能有重复的键值。 */
2> 字典的遍历:
NSNumber//方式1 NSArray *keys = [dict allKey]; for(int i=0;i<dict.count;i++) { NSString *key = key[i]; NSString *object = dict[key]; } //方式2 [dict enumerateKeysAndObjectUsingBlock:^(id key,id obj,BOOL *stop) { NSLog(@"%@ %@",key,obj ); }];
1>作用:将基本数据类型包装成对象。
2> 将各种数据类型转换成字符串NSNumber *n =[NSNuber numberWithDouble:10.5];//将基本数据类型转化成对象; double d = [n doubleValue];//将对象转成基本数据类型
@10 //将10包装成NSNumber对象;
@'A' //将字符A包装成NSNumber对象;
@"A" //NSString对象注意:
3> NSNumber之所以能包装基本数据类的对象,是因为继承了NSValue。int age = 21; @age;//会报错,会误认为是关键字; @(age);//将age变量包装成NSNumber对象
4>将结构体包装成OC对象NSDateCGPoint p = CGPiontMaker(10,10); //将结构体转成value对象 NSValue *value = [NSValue valueWithPoint:p]; NSArray *array = @[value];//将value转换成相应的结构体。
作用:用来表示时间;
显示日期:NSDate *date = [NSDate date];//创建一个时间 变量(写这行代码时的时间) NSLog(@"%@",date);//打印出来的是0时区的时间。
NSDate *date = [NSDtae date];//如果想让时间显示在屏幕上,必须先转成字符串。 //日期格式化类 NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; formater.dateFormate = @"yyyy-MM-dd HH:mm:ss";//时间格式如:2014-11-20 17:56:34 NSString *str = [formatter stringFromDate:date]; NSLog(@"%@",str);
OC基础——Foundation框架之集合型类
最新推荐文章于 2015-11-10 21:03:30 发布