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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gmadong@163.com 中级黑马   /  2014-4-26 08:59  /  2117 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 gmadong@163.com 于 2014-4-26 09:44 编辑

weak,assign都是弱引用有啥区别,在啥时使用weak或assign

评分

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

查看全部评分

13 个回复

正序浏览
脸皮猴 发表于 2014-4-26 09:42
声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。这样的好处能有效的防止野指针 ...

嗯嗯 是呵
回复 使用道具 举报
gmadong@163.com 发表于 2014-4-26 09:36
对啊 也就是oc对象为啥不能用assign而用weak了 肯定有区别啊

声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。这样的好处能有效的防止野指针。而assign只是简单的将引用计数器直接赋值,而weak多一个功能吧,能将这个指针指向的地址在被释放后将这个指针赋值为nil,我是这么理解他们的区别。
回复 使用道具 举报
脸皮猴 发表于 2014-4-26 09:32
在开启ARC的情况下,OC对象就不要用assign了,要么用strong,要么是weak或者copy。
在开发中一般UI控件用 ...

还有就是 在ARC下对oc对象也是可以用assign只是不建议使用 那说明weak更好了 没有区别吗
回复 使用道具 举报
本帖最后由 gmadong@163.com 于 2014-4-26 09:38 编辑
脸皮猴 发表于 2014-4-26 09:32
在开启ARC的情况下,OC对象就不要用assign了,要么用strong,要么是weak或者copy。
在开发中一般UI控件用 ...

对啊 也就是oc对象为啥不能用assign而用weak了 肯定有区别啊
回复 使用道具 举报
gmadong@163.com 发表于 2014-4-26 09:19
不是吧 weak一般用在代理对象啊

在开启ARC的情况下,OC对象就不要用assign了,要么用strong,要么是weak或者copy。
在开发中一般UI控件用weak,NSString用 copy,其他对象用strong。
在循环引用的情况下一端用weak,一端用strong
只有非OC对象采用assign。
回复 使用道具 举报
脸皮猴 发表于 2014-4-26 09:28
weak 用于成员变量OC对象时候的若引用,不是只限于代理对象。比如循环应引用的时候也是用weak ...

嗯 但大多数用在代理上 我就是想知道 weak,assign有啥区别 都是弱引用干嘛还要一个weak了
回复 使用道具 举报
gmadong@163.com 发表于 2014-4-26 09:19
不是吧 weak一般用在代理对象啊

weak 用于成员变量OC对象时候的若引用,不是只限于代理对象。比如循环应引用的时候也是用weak
回复 使用道具 举报
马凯文 发表于 2014-4-26 09:14
引自苹果官方文档strongSpecifies that there is a strong (owning) relationship to the destination obje ...

在OC中strong就相当于retain属性,而weak相当于assign吧但还是有区别的不然用这个属性干嘛
回复 使用道具 举报
脸皮猴 发表于 2014-4-26 09:13
在开启ARC的情况下:
weak 用于成员变量是 OC对象的时候,
assign 用于成员变量是非OC对象的时候,如 int、 ...

不是吧 weak一般用在代理对象啊
回复 使用道具 举报
在开启ARC的情况下:
weak 用于成员变量是 OC对象的时候,
assign 用于成员变量是非OC对象的时候,如 int、long型
所以区别在于,一个用于OC对象,一个用于非OC对象。(注意这是在开启ARC的情况下)

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马