在 Obj-C 中,属性可以配置为弱/强。实例变量。像以下 -
@interface MyClass {
NSObject *a;
}
MyClass 的对象是否保持弱引用a
或强引用或其他?我认为 iVar 在其对象被释放之前不会被释放。为什么我们不为类似 iVar 的属性指定弱/强?
在 Obj-C 中,属性可以配置为弱/强。实例变量。像以下 -
@interface MyClass {
NSObject *a;
}
MyClass 的对象是否保持弱引用a
或强引用或其他?我认为 iVar 在其对象被释放之前不会被释放。为什么我们不为类似 iVar 的属性指定弱/强?
对 ivar 的默认引用是__strong
,尽管您可以将其显式设置为__weak
或__strong
您的问题启发了我,我对 ObjectiveC 内存管理进行了深入搜索。我想与你分享一些我从 Apple Doc 获得的东西。
实例变量的默认行为
实例变量默认保持对对象的强引用
为什么我们不为类似 iVar 的属性指定弱/强?
局部变量和非属性实例变量默认保持对对象的强引用。无需显式指定 strong 属性,因为它是默认值。
只有当该变量在范围内,或者直到它被重新分配给另一个对象或 nil 时,变量才会保持对对象的强引用。如果不想让变量保持强引用,可以将其声明为 __weak,如下所示:
NSObject * __weak weakVariable;
@interface MyClass {
__weak NSObject *a;
__strong NSObject *a;
__unsafe_unretained NSObject *obj;
}