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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Lin枫 于 2014-4-15 08:36 编辑

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

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

3 个回复

倒序浏览
copy 相当于retain,不过要视情况而定,因为有时候需要修改新的副本不影响原来的,而有时候需要影响原来的
retain,是当成员属性是OC对象时设置
assign,是当成员属性时非OC对象的普通类型时设置,比如int ,double等等

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 于清扬 于 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. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
;P楼主,我知道你是在 做OC入学测试,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马