这是我的理解,设置一个ivar现在保留被分配给它的对象,因为设置变量默认为strong
限定符。因为ivars在声明它的对象的作用域中,而strong
在变量的作用域中保留对象,这意味着当包含ivar的对象仍然存在时,ivars的值永远不会被释放。
正确吗?
如果是这样,我认为在内存管理方面,保留(强)属性和简单的ivar之间没有区别了吗?
如果变量:
- 在类中使用ARC声明。
- 仅用于类实现(不作为类接口的一部分公开)。
- 不需要任何KVO
- 不需要任何自定义getter/setter。
则可以将其声明为没有相应@property
/@synthesize
的ivar,并在实现中直接引用它。在类实现文件中声明这个变量与Encapsulation是内联的。
// MyClass.h
@interface MyClass : ParentClass
@end
// MyClass.m
@implementation MyClass {
NSString *myString;
}
- (void)myMethod {
myString = @"I'm setting my ivar directly";
}
@end
- 这个变量将被ARC编译器视为
__strong
。 如果是对象,初始化为
nil
;如果是原语,初始化为0
。您不能使用KVO并使用实例变量自定义getter和setter,除非它们在使用ARC时非常相似。