黑马程序员技术交流社区

标题: weak,assign [打印本页]

作者: gmadong@163.com    时间: 2014-4-26 08:59
标题: weak,assign
本帖最后由 gmadong@163.com 于 2014-4-26 09:44 编辑

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

作者: 脸皮猴    时间: 2014-4-26 09:13
在开启ARC的情况下:
weak 用于成员变量是 OC对象的时候,
assign 用于成员变量是非OC对象的时候,如 int、long型
所以区别在于,一个用于OC对象,一个用于非OC对象。(注意这是在开启ARC的情况下)
作者: gmadong@163.com    时间: 2014-4-26 09:19
脸皮猴 发表于 2014-4-26 09:13
在开启ARC的情况下:
weak 用于成员变量是 OC对象的时候,
assign 用于成员变量是非OC对象的时候,如 int、 ...

不是吧 weak一般用在代理对象啊
作者: gmadong@163.com    时间: 2014-4-26 09:23
马凯文 发表于 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:28
gmadong@163.com 发表于 2014-4-26 09:19
不是吧 weak一般用在代理对象啊

weak 用于成员变量OC对象时候的若引用,不是只限于代理对象。比如循环应引用的时候也是用weak
作者: gmadong@163.com    时间: 2014-4-26 09:30
脸皮猴 发表于 2014-4-26 09:28
weak 用于成员变量OC对象时候的若引用,不是只限于代理对象。比如循环应引用的时候也是用weak ...

嗯 但大多数用在代理上 我就是想知道 weak,assign有啥区别 都是弱引用干嘛还要一个weak了
作者: 脸皮猴    时间: 2014-4-26 09:32
gmadong@163.com 发表于 2014-4-26 09:19
不是吧 weak一般用在代理对象啊

在开启ARC的情况下,OC对象就不要用assign了,要么用strong,要么是weak或者copy。
在开发中一般UI控件用weak,NSString用 copy,其他对象用strong。
在循环引用的情况下一端用weak,一端用strong
只有非OC对象采用assign。

作者: gmadong@163.com    时间: 2014-4-26 09:36
本帖最后由 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:39
脸皮猴 发表于 2014-4-26 09:32
在开启ARC的情况下,OC对象就不要用assign了,要么用strong,要么是weak或者copy。
在开发中一般UI控件用 ...

还有就是 在ARC下对oc对象也是可以用assign只是不建议使用 那说明weak更好了 没有区别吗
作者: 脸皮猴    时间: 2014-4-26 09:42
gmadong@163.com 发表于 2014-4-26 09:36
对啊 也就是oc对象为啥不能用assign而用weak了 肯定有区别啊

声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。这样的好处能有效的防止野指针。而assign只是简单的将引用计数器直接赋值,而weak多一个功能吧,能将这个指针指向的地址在被释放后将这个指针赋值为nil,我是这么理解他们的区别。
作者: gmadong@163.com    时间: 2014-4-26 09:43
脸皮猴 发表于 2014-4-26 09:42
声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。这样的好处能有效的防止野指针 ...

嗯嗯 是呵




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