copy与strong的区别,copy与mutableCopy的区别

copy只能修饰不可变的对象,因为修饰可变的对象会得到一个不可变的对象,在调用可变对象的方法时会导致程序崩溃。例如copy修饰的NSMutableArray得到的是一个NSArray,这个时候你去调用addObjiect:方法就会导致程序崩溃。

copy修饰的对象会重新复制一份所赋的值,例如有一个NSString * name被赋值了‘张三’,‘张三’的内存地址为0x600000267a70,copy修饰的name会重新开辟一个新的内存地址如0x6000002670a7,而strong修饰的name不会重新开辟新的内存地址,会使0x600000267a70内存地址的引用计数加1,所以当你修改‘张三’值的时候,strong修饰的name会随着改变,copy修饰的name不会改变。

深拷贝与完全拷贝

copy只会是把修改的对象重新开辟内存空间,不会重新开辟内存存储对象的内容(也可以理解为copy只会复制第一层对象,不会复制下面第二层,第三层...内容)如:NSString*name = @“张三”,创建了一个Model*A,A有一个copy修饰的sex属性,A.sex = name;,此时A.sex会重新分配一个内存地址,指向存储“张三”的这块内存地址。

NSMutableArray *arrM2 = [[NSMutableArray alloc] initWithArray:arrM1 copyItems:YES];此方法只能解决第二层的复制问题,但对于第三层,第四层无法复制,要想解决此问题可以使用 [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:object]];,该方法会返回一个id对象


下图为对象的copy与mutableCopy方法的使用说明

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

相关阅读更多精彩内容

  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 1,002评论 0 2
  • 九月的中下旬,是一年一度的军训大会,炎炎烈日下,是一个个对新生活充满希望的小鲜肉们,秉承着“不怕苦,不怕累”的理念...
    小帅在成长阅读 179评论 0 0
  • 武志红老师的专栏名字就叫“成为你自己”。经过这些周的学习,我不仅解开了自己成长过程中的困惑,还让我发现了喜欢做的事...
    may小薇阅读 230评论 1 0
  • 1.CSS的全称是什么? CSS,层叠样式表,英文全称:Cascading Style Sheets,是一种用来表...
    zh_yang阅读 1,027评论 0 1
  • 海底捞,是大陆目前最红的火锅连锁店,近年台湾人到大陆,特别是服务业者几乎都想去海底捞见识一下。 火锅店能卖得让13...
    无名悍将阅读 1,313评论 0 0

友情链接更多精彩内容