iVars引用强,弱还是什么?

时间:2013-05-09 12:03:14

标签: ios objective-c memory-management instance-variables

在Obj-C中,属性可以配置为弱/强。实例变量。喜欢以下 -

@interface MyClass {
NSObject *a;
}

MyClass的对象是否保持弱引用a或强或其他?我认为iVar在其对象发布之前不会发布。 为什么我们不为iVar属性指定弱/强?

3 个答案:

答案 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;
}