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

------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};


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值