iVars引用强,弱还是什么?

use*_*227 15 memory-management objective-c instance-variables ios

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

@interface MyClass {
NSObject *a;
}
Run Code Online (Sandbox Code Playgroud)

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

kap*_*kap 14

对ivar的默认引用是__strong,但您可以将其明确设置为__weak__strong



Ani*_*ese 13

您的问题激发了我的灵感,并对ObjectiveC内存管理进行了深入研究.我想与你分享一些我从Apple Doc获得的东西.

实例变量的默认行为

默认情况下,实例变量保持对对象的强引用

为什么我们不为iVar属性指定弱/强?

默认情况下,局部变量和非属性实例变量保持对对象的强引用.没有必要明确指定强属性,因为它是默认属性.
只要该变量在范围内,或者直到将其重新分配给另一个对象或nil,变量就会保持对对象的强引用.

如果您不希望变量维护强引用,可以将其声明为__weak,如下所示:

  NSObject * __weak weakVariable;
Run Code Online (Sandbox Code Playgroud)