黑马程序员技术交流社区

标题: copy-一个问题 [打印本页]

作者: 程浩    时间: 2014-4-21 18:40
标题: copy-一个问题
基础视频没有讲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深拷贝时的功能?
作者: 啊康    时间: 2014-4-21 19:51
首先我更正一下,更新后的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方法进行拷贝操作。深拷贝和浅拷贝的区别是看你创建的对象和原对象的区别,是否是同一个对象,地址是否相同而已。

作者: 程浩    时间: 2014-4-21 23:55
啊康 发表于 2014-4-21 19:51
首先我更正一下,更新后的x-code并不是不能使用这些功能,只要你找到ARC设置那里将ARC功能关闭就可以使用这 ...

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

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

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

A4F026D2-D867-4D2F-A8CA-F7AF63F8FA25.png





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