雅乐网

计算机技术、学习成长

编程 » IOS开发 » Object-c 的copy,mutablecopy,深拷贝浅拷贝。

Object-c 的copy,mutablecopy,深拷贝浅拷贝。

Copy

系统容器类 例如NSArrayNSDictionary

obj2 = [obj1 copy]返回的必然是一个不可变对象,无论obj1是可变对象还是不可变对象。如果obj1是一个不可变对象,那么它们指向同一个对象。

obj2 = [obj1 mutableCopy]返回的必然是一个可变对象,无论obj1是可变对象还是不可变对象。即使obj1也是一个可变对象,它们仍指向不同地址,是两个对象。

========================

自定义类。

因为copyWithZone:mutableCopyWithZone:完全由自己来实现,所以代码的不同实现方式,决定了返回对象是什么。

例如直接在copyWithZone:方法中return self;那么obj2 = [obj1 copy]相当于obj2 = obj1,即内容赋值,此时ob2jobj1指针指的同样的内存地址,内容相同。

===========================

当数组A内部对象有数组B时,数组A里存的是B的指针,所以将Amutablecopy给C,A和C的指针地址虽然不同,但内容存的都是B的指针地址,所以修改一个中的B的值还是会影响另一个数组中B的值。也就是所谓的浅拷贝。

想要不影响,就要自己定义拷贝函数时,为内部的B也进行mutablecopy。就是深拷贝的意思,深入内部每一层进行拷贝。

============================

只要记住OC的对象都是指针表示的,对象间的赋值是把指针里存着的地址进行赋值,和基本数据类型一样,只是赋值内容,变量的地址还是不一样的。这些就很容易理解了。

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
http://www.yalewoo.com/objectc_copy_mutablecopy.html

上一篇:

下一篇:

我要评论

验证码*: 2 + 8 =