Objective-C 中的强引用(__strong)和 弱引用(__weak)
在Objective-C的ARC模式中,
1 | id obj1 = [[NSObject alloc] init]; |
这里虽然没有显示的声明为 __strong
,但是 Objective-C
默认声明的一个对象就为 __strong
,即:
1 | id obj1 = [[NSObject alloc] init]; |
和
1 | id __strong obj1 = [[NSObject alloc] init]; |
是等价的。
在强引用中,有时会出现循环引用的情况,这时就需要弱引用来帮忙( __weak
)。
强引用持有对象,弱引用不持有对象。
强引用可以释放对象,但弱引用不可以,因为弱引用不持有对象,当弱引用指向一个强引用所持有的对象时,当强引用将对象释放掉后,弱引用会自动的被赋值为nil,即弱引用会自动的指向nil。
下面用代码来说明:
1 | // |