A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© stonelv0101 中级黑马   /  2014-12-14 20:09  /  759 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

咨询下,各位大牛,NSDictionary中,什么深复制?什么是浅复制?求大牛们能给小白详细点的指点,谢谢

3 个回复

正序浏览
从今以后 发表于 2014-12-15 01:50
复制的目的就是副本和源对象之间不会相互影响,浅拷贝不产生新对象,引用计数+1,深拷贝产生新对象。copy产 ...

十分感谢大牛的指点,小弟受教了
回复 使用道具 举报
复制的目的就是副本和源对象之间不会相互影响,浅拷贝不产生新对象,引用计数+1,深拷贝产生新对象。copy产生不可变对象,mutablecopy可变。
例如一个不可变的比如NSString,copy的话,它本身就不可变,就算和副本公用一个也不会互相影响,所以为了性能,copy后副本指向的就是源对象本身,只是引用计数+1了,这种情况和retain一样,叫浅复制,没有产生新对象。
概括的说,不可变对象copy,是唯一的浅复制。其他情况,都是深复制。比如可变对象mutablecopy,如果还指向同一个对象,那么修改其中一个另一个受影响。又或者不可变对象mutablecopy,不产生新对象,源对象不可变,如何实现mutablecopy复制出可变对象。
另外,数组字典这种容器类型,深复制是指容器本身是个新对象,但是里面装的元素,两个容器其实公用一份,复制的只是引用。比如可变数组里装着几个可变字符串,复制数组是深复制,确实产生了新数组,但是修改其中一个数组中的可变字符串,另一个也会变,因为它们指向同一个字符串。
回复 使用道具 举报
看看快速视频中的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马