Property vs. ivar in times of ARC



这是我的理解,设置一个ivar现在保留被分配给它的对象,因为设置变量默认为strong限定符。因为ivars在声明它的对象的作用域中,而strong在变量的作用域中保留对象,这意味着当包含ivar的对象仍然存在时,ivars的值永远不会被释放。

正确吗?

如果是这样,我认为在内存管理方面,保留(强)属性和简单的ivar之间没有区别了吗?

如果变量:

  1. 在类中使用ARC声明。
  2. 仅用于类实现(不作为类接口的一部分公开)。
  3. 不需要任何KVO
  4. 不需要任何自定义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时非常相似。

最新更新