黑马程序员技术交流社区

标题: 定义属性时,什么情况使用copy,assign,和retain 。 [打印本页]

作者: Lin枫    时间: 2014-4-14 12:03
标题: 定义属性时,什么情况使用copy,assign,和retain 。
本帖最后由 Lin枫 于 2014-4-15 08:36 编辑

定义属性时,什么情况使用copy,assign,和retain 。

作者: 罗冠坤    时间: 2014-4-14 12:05
copy 相当于retain,不过要视情况而定,因为有时候需要修改新的副本不影响原来的,而有时候需要影响原来的
retain,是当成员属性是OC对象时设置
assign,是当成员属性时非OC对象的普通类型时设置,比如int ,double等等
作者: 于清扬    时间: 2014-4-14 13:05
本帖最后由 于清扬 于 2014-4-14 13:07 编辑

使用@property定义属性时,使用:

copy  生成的setter方法 release旧值,copy新值,一般用于oc字符串和block
  1. - (void)setName:(NSString *)name
  2. {
  3.     if (_name != name) {
  4.         [_name release];
  5.         _name = [name copy];
  6.     }
  7. }
复制代码

retain 生成的setter方法 release旧值,retain新值,用于oc对象
  1. - (void)setDog:(Dog *)dog
  2. {
  3.     if (_dog != dog) {
  4.         [_dog release];
  5.         _dog = [dog retain];
  6.     }
  7. }
复制代码


assign 生成的setter方法 直接赋值,用于基本数据类型。特殊的情况下,循环引用的时候,一端用retain,一端用assign.
  1. - (void)setAge:(int)age
  2. {
  3.     _age = age;
  4. }
复制代码

作者: 董月峰    时间: 2014-4-14 13:14
;P楼主,我知道你是在 做OC入学测试,哈哈




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