------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组C语言中数组的弊端只能存放任意OC对象, 并且是有顺序的不能存储非OC对象, 比如int\float\double\char\enum\struct等。
NSMutableArray是NSArray的子类NSArray是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素,也不能再往里面添加元素,NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素;
不可变数组NSArray
1. NSArray中只能存放对象,不能存放基本数据类型,通常我们可以通过在基本数据类型前加@进行转换;
2. 数组中的元素后面必须加nil以表示数据结束;
3. makeObjectsPerformSelector执行数组中对象的方法,其参数最多只能有一个;
4. 无论是数组的追加、删除、截取都没有改变原来的数组,只是产生了新的数组而已;
可变数组NSMutableArray
1. 可变数组中的元素后面必须加nil以表示数据结束;
2. 往一个可变数组中添加一个对象,此时这个对象的引用计数器会加1,当这个对象从可变数组中移除其引用计数器减1。同时当整个数组销毁之后会依次调用每个对象的releaes方法。
3. 在不可变数组中无论对数组怎么排序,原来的数组顺序都不会改变,但是在可变数组中如果使用sortUsingSelector:排序原来的数组顺序就发生了变化。
NSMutableDictionary是NSDictionary的子类NSDictionary是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
NSMutableDictionary是可变的, 随时可以往里面添加\更改\删除元素键。
NSDictionary的作用类似: 通过一个key(键), 就能找到对应的value(值)。
值对集合的特点
1. 字典存储的时候,必须是"键值对"的方式来存储(同时键不要重复);
2. 键值对中存储的数据是"无序的";
3. 键值对集合可以根据键, 快速获取数据。
//
// main.m
// NSArray
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *dema = [NSArray arrayWithObjects:@"蛮子",@"剑圣",@"赵信", nil];//创建不可变数组
NSMutableArray *noke = [NSMutableArray array]; //创建可变数组
noke.array = @[@"不详",@"诺手"]; //便易赋值
[noke addObject:@"亡勇"]; //给数组添加对象
NSLog(@"noke = %@",noke);
NSLog(@"noke count = %lu",[noke count]); //统计数组中对象计算个数
NSMutableDictionary *lol = [NSMutableDictionary dictionary];
lol.dictionary = @{@"1":dema,@"2":noke};
for(NSString * str in dema){ //快速遍历
NSLog(@"%@",str);
}
[noke enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"第%lu个:%@",idx+1,obj); //block遍历
}];
NSMutableArray *new = [NSMutableArray array];
new = [[lol objectForKey:@"2"]mutableCopy];
//根据key提取字典中的对象,简单的=为浅复制,故用mutableCopy
[new removeObjectAtIndex:1]; //移除一个指定位置的对象
NSLog(@"new = %@",new);
[new insertObject:@"瑞兔" atIndex:2]; //在指定位置插入的对象
NSLog(@"new = %@",new);
[new replaceObjectAtIndex:1 withObject:@"男刀"]; //替换对象
NSLog(@"new[1] = %@",[new objectAtIndex:1]);
[lol setObject:new forKey:@"3"];
[lol writeToFile:@"/code/code/lol.plist" atomically:YES]; //写入文件
}
return 0;
}
总结
NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标记)。nil就是0。0也是基本数据类型,不能存放到NSArray中,不能用nil的场合可用[NSNull null]。
错误用法:NSMutableArray *array = @[@"bob", @"steve", @"john"];
NSMutableDictionary *dic =@{@”1”:@”adsf”};