copy 和 mutableCopy

作者: Qiu_W | 来源:发表于2016-05-18 15:50 被阅读97次

一、浅拷贝和深拷贝的区别

浅拷贝就是指针拷贝,即不同的变量指向同一个对象,对象的地址是一样的。

深拷贝就是既拷贝对象的地址(在内存中重新分配一块内存,来存放内容)又拷贝对象的内容.

copy返回的对象都是不可变的,mutableCopy返回的对象都是可变的

二、对于NSString或者NSMutableString来说

2.1、copy对于NSString来说是浅拷贝 对于NSMutableStringl来说mutableCopy是深拷贝

2.2、无论是NSString还是NSMutableString,mutableCopy都是深拷贝

三、对于不可变容器和可变容器来说

3.1、对于不可变容器,copy是浅拷贝 mutableCopy也是浅拷贝(只拷贝地址,不拷贝内容)

3.2、对于可变容器,比如NSMutableArray,NSMutableDictionary、NSMutableSet,无论是copy还是mutableCopy都是浅拷贝(只拷贝地址,不拷贝内容)。

三、对于string为什么不用retain

retain本质是浅拷贝,引用计数加1即变量指向堆中的同一块内存区域,

对于不可变NSString,如果用retain,虽然指向了同一块内存区域,但是由于NSString是不可变的,所以外部的变化并不会造成属性也随之变化。

对于可变的NSMutableString,如果用retain,当外部变量的值发生变化时,属性的值也会随之变化(快哭了这肯定不是我们i 想要的结果)

四、结果验证

代码1 代码2 打印

推荐推荐一篇博客 写的很好 讲解的很透彻形象

http://blog.csdn.net/jaywon/article/details/8772232

相关文章

网友评论

    本文标题:copy 和 mutableCopy

    本文链接:https://www.haomeiwen.com/subject/jbrwrttx.html