黑马程序员技术交流社区

标题: 求助深拷贝和浅拷贝的问题 [打印本页]

作者: 刘昭    时间: 2014-6-25 15:52
标题: 求助深拷贝和浅拷贝的问题
本帖最后由 刘昭 于 2014-6-28 14:09 编辑

在视频里看到深拷贝和浅拷贝,
copy 、 retain 、mutableCopy在什么时候使用,有什么区别?
是不是copy 、 retain 就是浅拷贝,mutableCopy就是深拷贝?
作者: nanzu    时间: 2014-6-25 16:46
看我的贴!
作者: 刘昭    时间: 2014-6-26 16:45
nanzu 发表于 2014-6-25 16:46
看我的贴!

nanzu 同学  ,没有看见这个问题的贴子啊~
你都没写标题,不好找
作者: 抱0抱    时间: 2014-6-26 18:29
OC的东西啊 你看视频速度很快呀
作者: 刘昭    时间: 2014-6-27 18:06
抱0抱 发表于 2014-6-26 18:29
OC的东西啊 你看视频速度很快呀

我跳着看的,c的还没看....
作者: 抱0抱    时间: 2014-6-27 21:20
刘昭 发表于 2014-6-27 18:06
我跳着看的,c的还没看....

入学测试的东西都是OC的 所以你可以考虑考虑 我现在看OC看的比较蒙
作者: m573555543    时间: 2014-6-28 09:29
不能说retain是浅拷贝,
因为浅拷贝被的定义是:指针拷贝,源文件和新文件指向的是同一个地址,也就是说浅拷贝要复出出来一个新的文件,但两个文件的地址还是一个。浅拷贝的话是只有不可变数组(如:NSArray,NSSet,NS字典)遇上copy,才是浅拷贝,剩下的都是深拷贝。

深拷贝的定义是:内容复制,也就是还是要复制出来一个新的对象,但新对象和原来对象的地址是两个完全没有关系的地址。改变新对象,旧对象就不会改变。改变旧对象新对象就不会改变。他的引用计数器是旧对象不变,新对象的retainCount + 1 .


而 retain  他只是让引用计数器加1 。 并没有让旧对象复制出来一个新的对象。
作者: libra    时间: 2014-6-28 10:12
还没看到存储器管理。。
作者: 刘昭    时间: 2014-6-28 12:46
m573555543 发表于 2014-6-28 09:29
不能说retain是浅拷贝,
因为浅拷贝被的定义是:指针拷贝,源文件和新文件指向的是同一个地址,也就是说浅 ...

噢 , 终于懂了.....
只有不可变的数组Copy才是浅拷贝,而且浅拷贝只是拷贝了对象的指针。
作者: Littlekin    时间: 2014-6-28 12:54
深拷贝:深拷贝就是新建一个对象和新开辟一块内存。
浅拷贝:浅拷贝就是新建一个对象,但是都指向同一块内存地址。
作者: TLTY    时间: 2014-6-28 13:13
你可以在百度上查啊,关于深拷贝和浅拷贝有很多博客都写得很详细
作者: 刘昭    时间: 2014-6-28 13:17
Littlekin 发表于 2014-6-28 12:54
深拷贝:深拷贝就是新建一个对象和新开辟一块内存。
浅拷贝:浅拷贝就是新建一个对象,但是都指向同一块内 ...

嗯,对啊
理解了  
浅拷贝就是只复制了原对象的指针,指向的还是原对象的内容。
而深拷贝是新建了一个对象,复制了原对象的内容。
作者: 刘昭    时间: 2014-6-28 13:19
TLTY 发表于 2014-6-28 13:13
你可以在百度上查啊,关于深拷贝和浅拷贝有很多博客都写得很详细

嗯,好的,谢谢哈~~~
这是新人贴,我先来试试水~~
作者: a1130003724    时间: 2014-6-28 13:53
浅复制和深复制是对于包含对象成员的对象而言的。
浅复制:只复制对象本身,对象的成员只复制指针。
深复制:在浅复制的基础上,同时复制对象的成员。
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人还活着
作者: TLTY    时间: 2014-6-28 14:05
刘昭 发表于 2014-6-28 13:19
嗯,好的,谢谢哈~~~
这是新人贴,我先来试试水~~

呵呵,我也是,正在为技术分奋斗呢
作者: 刘昭    时间: 2014-6-28 14:07
a1130003724 发表于 2014-6-28 13:53
浅复制和深复制是对于包含对象成员的对象而言的。
浅复制:只复制对象本身,对象的成员只复制指针。
深复制 ...

呃,比喻得好生动~~~




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