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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程浩 中级黑马   /  2014-4-21 18:40  /  1119 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基础视频没有讲copy,快速入门视频种有讲例如Student对象的copy:
@property (nonatomic,copy) NSString *name;//此时浅拷贝,str.name=string不改变name中的值
@property (nonatomic,retain) NSString *name;//此时深拷贝会改变name的值
当然NSString建议用copy,其他对象用retain
我的问题是:
更新过后的xcode不允许使用release,retain,retainCount,那么怎样做会类似retain深拷贝时的功能?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
首先我更正一下,更新后的x-code并不是不能使用这些功能,只要你找到ARC设置那里将ARC功能关闭就可以使用这些方法。
其次,Copy和retain的区别:
     copy:建立一个索引计数为 1 的对象,然后释放旧对象
     retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为 1
     Copy 其实是建立了一个相同的对象,而 retain 不是:
     比如一个 NSString  对象,地址为 0×1111  ,内容为 @”STR”
     Copy到另外一个 NSString之后,地址为 0×2222  ,内容相同,新的对象 retain 为 1  ,旧有对象没有变化
     retain到另外一个 NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的 retain 值 +1
     也就是说, retain  是指针拷贝, copy  是内容拷贝。
最后,无论是深拷贝还是浅拷贝,和使用不实用ARC没有绝对关系。
只要你遵守了NSCopying协议或者NSMutableCopying协议之后就可以调用copy方法或者MutableCopy方法进行拷贝操作。深拷贝和浅拷贝的区别是看你创建的对象和原对象的区别,是否是同一个对象,地址是否相同而已。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
啊康 发表于 2014-4-21 19:51
首先我更正一下,更新后的x-code并不是不能使用这些功能,只要你找到ARC设置那里将ARC功能关闭就可以使用这 ...

Thanks
不过而且实话说copy在arc中的使用我还没测试过,还不知道具体如何天实现
如果有谁能给出重点代码,那真是感激不尽!
回复 使用道具 举报
本帖最后由 程序猿-2014 于 2014-4-22 01:01 编辑

这个你想多了    我用Xcode5.0给你试验了下    在@property中retain是可以使用的   当然Copy也是能用的

A4F026D2-D867-4D2F-A8CA-F7AF63F8FA25.png (28.5 KB, 下载次数: 3)

A4F026D2-D867-4D2F-A8CA-F7AF63F8FA25.png
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马