在Obj-C中,属性可以配置为弱/强。实例变量。喜欢以下 -
@interface MyClass {
NSObject *a;
}
MyClass的对象是否保持弱引用a
或强或其他?我认为iVar在其对象发布之前不会发布。
为什么我们不为iVar属性指定弱/强?
答案 0 :(得分:13)
对ivar的默认引用为__strong
,但您可以明确将其设置为__weak
或__strong
答案 1 :(得分:12)
你的问题激发了我的灵感,我对ObjectiveC内存管理进行了深入研究。我想与你分享一些我从Apple Doc获得的东西。
实例变量的默认行为
默认情况下,实例变量维护对对象的强引用
为什么我们不为iVar属性指定弱/强?
默认情况下,局部变量和非属性实例变量保持对对象的强引用。没有必要明确指定强属性,因为它是默认属性 只要该变量在范围内,或者直到将其重新分配给另一个对象或nil,变量就会保持对对象的强引用。
如果您不希望变量维持强引用,可以将其声明为__weak,如下所示:
NSObject * __weak weakVariable;
答案 2 :(得分:2)
@interface MyClass {
__weak NSObject *a;
__strong NSObject *a;
__unsafe_unretained NSObject *obj;
}