黑马程序员技术交流社区

标题: 深复制、浅复制 [打印本页]

作者: stonelv0101    时间: 2014-12-14 20:09
标题: 深复制、浅复制
咨询下,各位大牛,NSDictionary中,什么深复制?什么是浅复制?求大牛们能给小白详细点的指点,谢谢

作者: 任冰冰    时间: 2014-12-14 23:20
看看快速视频中的
作者: 从今以后    时间: 2014-12-15 01:50
复制的目的就是副本和源对象之间不会相互影响,浅拷贝不产生新对象,引用计数+1,深拷贝产生新对象。copy产生不可变对象,mutablecopy可变。
例如一个不可变的比如NSString,copy的话,它本身就不可变,就算和副本公用一个也不会互相影响,所以为了性能,copy后副本指向的就是源对象本身,只是引用计数+1了,这种情况和retain一样,叫浅复制,没有产生新对象。
概括的说,不可变对象copy,是唯一的浅复制。其他情况,都是深复制。比如可变对象mutablecopy,如果还指向同一个对象,那么修改其中一个另一个受影响。又或者不可变对象mutablecopy,不产生新对象,源对象不可变,如何实现mutablecopy复制出可变对象。
另外,数组字典这种容器类型,深复制是指容器本身是个新对象,但是里面装的元素,两个容器其实公用一份,复制的只是引用。比如可变数组里装着几个可变字符串,复制数组是深复制,确实产生了新数组,但是修改其中一个数组中的可变字符串,另一个也会变,因为它们指向同一个字符串。
作者: stonelv0101    时间: 2014-12-15 06:47
从今以后 发表于 2014-12-15 01:50
复制的目的就是副本和源对象之间不会相互影响,浅拷贝不产生新对象,引用计数+1,深拷贝产生新对象。copy产 ...

十分感谢大牛的指点,小弟受教了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2