为什么在弱引用属性中,我应该使用unsafe_unretained限定符而不是assign?
- 论坛
- 为什么在弱引用属性中,我应该使用unsafe_unretained限定符而不是assign?
12 浏览
匿名的
0 Comments
为什么我应该在弱引用属性中使用`unsafe_unretained`修饰符而不是`assign`?这个问题的出现是因为在ARC下,当使用`assign`修饰符时,之前的代码将会出错。在ARC之前,`assign`属性会被映射为`unsafe_unretained`。然而,在ARC下,默认的属性修饰符是`__strong`,所以在这种情况下需要使用`unsafe_unretained`来正确地使用弱引用属性。
解决方法是在声明属性时使用`__unsafe_unretained`修饰符,或者使用ivar合成时直接使用`(unsafe_unretained) Bar *test`来声明属性。这样写只是不同的写法,但表达了不同的意图。
在iOS 4及以上的版本中都支持ivar合成。当使用ivar合成时,还需要注意其他一些事项。