关于NSArrayI 和 NSArrayM

今天特别奇葩一个问题,让我认清了NSArrayI 和 NSArrayM相对应的是什么。

因为在保存文件数据时,控制台打印输出的class类是__NSArrayM。。。。而我判断的却是NSArray,所以无论如何都没进判断。。。这才百度,知道了错误点在哪。。。

NSArrayI   ----> NSArray                    NSArrayM ----- > NSMutableArray

之前也遇到一个问题,在加载更多数据的时候,出现了这样的一个问题

-[__NSArrayI addObjectsFromArray:]: unrecognized selector senttoinstance0x7fa1049b8f40'


排查后发现是__NSArrayI的问题,NSArrayI是NSArray,而__NSArrayM才是NsMutableArray,可是我记得我定义的时候是NSMutableArray,最后追踪代码后发现我在第一次赋值时用的是copy,而copy之后的副本都是不可变的,但是编译器不会报错,只有在运行时才会崩溃,所以就引发了上面的问题,下次一定要小心再小心

对于copy和mutableCopy来说,都可以复制可变对象或者不可变对象的引用(复制引用属于浅拷贝),复制后的数组称为副本。

总结

1.副本类型来看

只要副本是NSArray数组,原数组不管可变不可变,副本不可变(现象时提示都没有,编译时不会通过)

如果副本是NSMutableArray数组,不管原数组可变不可变

如果是以copy形式复制的,那么副本可以假象的追加数据,但实际运行就会崩溃(运行时不会通过)

如果是以mutableCopy复制,那么该副本就是可变副本

2.从复制引用的方法来看

凡是以copy复制的副本都是不可变副本

用mutableCopy复制后可以改变的前提是:副本必须是NSMutableArray数组

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 4,479评论 0 2
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    琦均煞Sylar阅读 3,258评论 0 0
  • 基础部分 1、设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处...
    luzsyn阅读 3,480评论 0 2
  • 今天上午的课程是微格教学,即每名学员在微格教室里进行三十分钟的教学展示,分组进行,一个小组一间微格教室,组员轮流上...
    楚歌儿阅读 1,085评论 0 2
  • line-height有什么作用? line-height是用于行高,另当line-height等于height时...
    盖被吹空调阅读 2,669评论 1 0

友情链接更多精彩内容