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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoqu1998 中级黑马   /  2014-12-25 17:55  /  1393 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目里面有,但是不会啊  视频里没有啊   
求会的帮忙解答一下,,急~~~~~~~~~

4 个回复

正序浏览
浅层复制:只复制指向对象的指针,而不复制引用对象本身。
深层复制:复制引用对象本身。
意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了
两份独立对象本身。
用网上一哥们通俗的话将就是:
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。
回复 使用道具 举报
本帖最后由 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;
}
希望对你有帮助 ,这些东西在李明杰老师的视频里面都有。







回复 使用道具 举报
MJ老师的《快速入门教程》里面有一章专门讲深复制浅复制,就是Copy那个视频,这是链接地址,自己下载
http://pan.baidu.com/share/link?shareid=3691511572&uk=3560277524
回复 使用道具 举报
没人会吗?????
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马