黑马程序员技术交流社区

标题: 深复制浅复制到底怎么回事? [打印本页]

作者: xiaoqu1998    时间: 2014-12-25 17:55
标题: 深复制浅复制到底怎么回事?
题目里面有,但是不会啊  视频里没有啊   
求会的帮忙解答一下,,急~~~~~~~~~
作者: xiaoqu1998    时间: 2014-12-25 20:58
没人会吗?????
作者: zsling    时间: 2014-12-26 10:44
MJ老师的《快速入门教程》里面有一章专门讲深复制浅复制,就是Copy那个视频,这是链接地址,自己下载
http://pan.baidu.com/share/link?shareid=3691511572&uk=3560277524
作者: banish    时间: 2014-12-26 14:53
本帖最后由 banish 于 2014-12-26 14:55 编辑

一个对象使用copy或mutableCopy方法可以创建对象的副本:
copy – 需要先实现NSCoppying协议,创建的是不可变副本(如NSString、NSArray、NSDictionary)
mutableCopy – 需要先实现NSMutableCopying协议,创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)
深复制:内容拷贝,源对象和副本指向的是不同的两个对象。源对象引用计数器不变,副本计数器设置为1
浅复制:指针拷贝,源对象和副本指向的是同一个对象。对象的引用计数器+1,其实相当于做了一次retain操作
只有不可变对象创建不可变副本(copy)才是浅复制,其他都是深复制
如果想自定义copy,那么就必须遵守NSCopying,并且实现 copyWithZone:方法
如果想自定义mutableCopy,那么就必须遵守NSMutableCopying,并且实现 mutableCopyWithZone: 方法
以copy为例,建议用[self class]代替直接类名
- (id)copyWithZone:(NSZone *)zone {
    id copy = [[[self class] allocWithZone:zone] init];
    // 做一些属性的初始化.....
    return copy;
}
希望对你有帮助 ,这些东西在李明杰老师的视频里面都有。








作者: 贺羽昌    时间: 2014-12-26 17:45
浅层复制:只复制指向对象的指针,而不复制引用对象本身。
深层复制:复制引用对象本身。
意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了
两份独立对象本身。
用网上一哥们通俗的话将就是:
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。




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