/*
NSString (NSMutableString)
NSArray (NSMutableArray)
NSSet (NSMutableSet)
NSDictionary (NSMutableDictionary)
*/
一、NSArray与NSMutableArray
1.NSArray的创建
OC数组不能存放nil值 OC数组只能存放oc对象,不能存放非oc对象类型,如int、struct、enum等
2.NSArray的遍历
// NSArray是不可变数组,这个array永远是空数组
NSArray *array = [NSArray array];
// 创建单个对象
NSArray*array2 = [NSArray arrayWithObject:@"jack"];
// 创建多个对象,nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"Rose" ,nil];
// NSArray *array4 = [NSArray arrayWithObjects:@"jack",@"Rose",@"jim" ,nil];
//快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"Rose",@"jim"];
// NSArray的元素个数
NSLog(@"%ld",array3.count);
// NSArray的元素访问
NSLog(@"%@",[array3 objectAtIndex:1]);
// 通过下标快速访问元素
NSLog(@"%@",array3[0]);
1)l用for循环遍历
// for循环遍历
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"jack"];
for(int i = 0;i<array.count;i++)
{
NSLog(@"%@",array[i]);
}
2)用for(id obj in 数组名)方式遍历
// id obj代表数组的位置
for(id obj in array)
{
// 找obj元素在数组中的位置
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%@",obj);
}
3)用enumerateObjectsUsingBlock遍历
<pre name="code" class="objc"> // 每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当做参数传给block
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld-%@",idx,obj);
// 可以控制停止遍历
if(idx == 1);
*stop = YES;
}];
3.NSMutableArray的创建与删除元素
1)创建NSMutableArray数组
<pre name="code" class="objc"> // 创建NSMutableArray NSMutableArray *array = [NSMutableArray array]; NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"jake",@"Rose",@"jim", nil]; // 添加元素 [array addObject:[[Person alloc] init]]; [array addObject:@"jack"]; // 错误写法 //[array addObject:nil]; NSLog(@"%ld",array.count);
</pre>NSArray没有addobject:id这个方法,不可调用
2)删除元素
// 删除所有元素
[array removeAllObjects];
// 删除指定对象
[array removeObject:@"jack"];
// 删除第二个元素
[array removeObjectAtIndex:1];
NSLog(@"%@",array);
3)经典错误
// @[]只创建不可变数组NSArray
NSArray *array4 = @[@"jack"];
// 错误写法,返回的是NSArray不可变数组,NSMutableArray没有@[]的快速创建方法
NSMutableArray *array3 = @[@"jack",@"rose"];
// 发送错误
[array addObject:@"jim"];
二、NSSet与NSMutableSet
1.NSSet的创建
NSSet *s = [NSSet set];
// 创建NSSet
NSSet *s2 = [NSSet setWithObjects:@"jack",@"Rose",@"jim", nil];
// 随机取出一个元素
NSSet *str = [s2 anyObject];
// 打印s2元素个数
NSLog(@"@ld",s2.count);
// 输出元素
NSLog(@"%@",str);
2.NSMutableSet的创建
NSMutableSet *s = [NSMutableSet set];
// 增加元素
[s addObject:@"jack"];
// 删除元素
[s removeObject:@"jack"];
3.总结比较NSArray和NSSet的区别
共同点
1)都是集合,都能存放多个oc对象 2)本身都不可变,都有一个可变的子类 3)只能存放oc对象,不能存放非oc对象类型(基本数据类型:int、double、char等)
不同点
NSArray有顺序,NSSet没有顺序
三、NSDictionary与NSMutableDictionary
1.NSDictionary的创建
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
id obj = [dict objectForKey:@"name"];
NSLog(@"%@",obj);
// 通过键集合数组和值集合数组创建
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
id obj = [dict objectForKey:@"address"];
NSLog(@"%@",obj);
// 较为麻烦的创建方式
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"北京",@"address", nil];
id obj = [dict objectForKey:@"name"];
// 返回的是键值对的个数
NSLog(@"%ld",dict.count);
// 简单快速创建
NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// 简单访问oc数组里面的内容
id obj = dict[@"name"];
NSLog(@"%@",obj);
2.NSMutableDictionary的基本使用
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];
// 为同一个key增加对象会覆盖之前的对象
[dict setObject:@"Rose" forKey:@"name"];
NSString *str = dict[@"name"];
// 删除键值对
[dict removeObjectForKey:@"name"];
// 错误写法,@{}创建的是不可变字典,返回的是NSDctionary类型对象,是不可变的
NSMutableDictionary *dict2 = @{@"name":@"jack"};
[dict setObject:@"rose" forKey:@"name"];
NSLog(@"%@",str);
3.NSDictionary 字典的遍历
1)第一种遍历方式
NSDictionary *dict = @{
// 字典是无序的,不允许有相同的key,但循允许有相同的value
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"address" : @"北京",
};
// 取出所有key
NSArray *keys = [dict allKeys];
for(int i = 0;i<dict.count;i++)
{
NSString *key = keys[i];
NSString *obj = dict[key];
NSLog(@"%@-%@",key,obj);
}
2)第二种遍历方式
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@-%@",key,obj);
// 只遍历一次就停止
//*stop = YES;
}];
四、NSNumber和NSValue
1.NSNumber
1)将基本数据类型转换成对象
<pre name="code" class="objc"> // 包装基本数据类型
NSNumber *num = [NSNumber numberWithInt:10];
// 放入集合对象
NSDictionary *dict =@{
@"name" : @"jack",
@"age" : num
};
// 取出NSNumber对象
NSNumber *num2 = dict[@"age"];
// 转换成基本数据类型
int a = [num2 intValue];
NSLog(@"%d",a);
<pre name="code" class="objc"> // double类型转换
NSNumber *n = [NSNumber numberWithDouble:10.3];
int a1 = [n doubleValue];
NSLog(@"%d",a1);
2)将基本数据类型转成字符串
int a = 20;
NSString *str = [NSString stringWithFormat:@"%d",a];
// 把基本数据类型转成字符串
[str intValue];
// 把字符串转成基本数据类型
//[@"20" intValue];
NSLog(@"%d",[@"20" intValue]);
3)将基本数据类型转换成NSNumber对象(编译器特性)
// @后面跟上一个数字自动转成number对象 @20
[NSNumber numberWithInt:20];
@10.5; //double型
@YES; //BOOL型
@'A'; //NSNumber对象
@"A"; // NSString对象
int age = 100;
// 将age变量包装成NSNumber对象
@(age);
2.NSValue
NSValue是NSNumber的父类
1)将结构体转为0c对象
<pre name="code" class="objc"> CGPoint p = CGPointMake(10, 10);
// 结构体-->OC对象:将结构体包装成Value对象
NSValue *value = [NSValue valueWithPoint:p];
// 将Value转成对应的结构体
[value pointerValue];
五、NSDate
1.NSDate的创建
<pre name="code" class="objc"> // 创建一个时间对象 NSDate *date = [NSDate date]; // 打印出的是0时区的时间 NSLog(@"%@",date);
// 使用时间间隔创建
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970年开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
// 从date2到现在经过的时间
[date2 timeIntervalSinceNow];
2.日期格式化类
<pre name="code" class="objc"><pre name="code" class="objc"> // 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// y 年 M 月 d 日
// m 分 s 秒 H(24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 格式化后的日期转为字符串
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@",str);
// 将字符串转换成date
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);
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------