您的位置:首页 > 职场人生

黑马程序员——ios学习笔记 OC Foundation—NSArray&NSDictionary

2015-08-12 01:23 495 查看
------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”};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: