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

本文详细解析了OC中NSArray与NSMutableArray的区别,包括它们的特性、使用场景和注意事项。着重介绍了不可变数组NSArray与可变数组NSMutableArray的区别,如元素存储、操作和内存管理等方面,并提供了实例代码进行演示。

------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)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值