在ARC时代的财产与ivar

时间:2011-10-20 12:50:47

标签: objective-c properties automatic-ref-counting ivar

我的理解是,设置ivar现在会保留分配给它的对象,因为设置变量默认为strong限定符。因为ivars在声明它们的对象的范围内,并且strong保留变量范围内的对象,这意味着当包含ivar的对象仍然存活时,永远不会释放ivars值。

这是对的吗?

如果是这样,我是否正确地认为在记忆管理方面,保留(强)属性和简单的ivar之间没有区别?

2 个答案:

答案 0 :(得分:69)

如果变量:

  1. 使用ARC在类中声明。
  2. 仅用于类实现(不作为类接口的一部分公开)。
  3. 不需要任何KVO
  4. 不需要任何自定义getter / setter。
  5. 然后将其声明为没有相应@property / @synthesize的ivar,并在实现中直接引用它。它与Encapsulation内联,以在类实现文件中声明此ivar。

    // MyClass.h
    @interface MyClass : ParentClass
    @end
    
    // MyClass.m
    @implementation MyClass {
        NSString *myString;
    }
    
    - (void)myMethod {
        myString = @"I'm setting my ivar directly";
    }
    @end
    
    • ARC编译器将此ivar视为__strong
    • 如果它是一个对象,它将被初始化为nil,如果它是一个基元,它将被初始化为0

答案 1 :(得分:6)

您不能使用KVO并使用实例变量进行自定义getter和setter,而不是使用ARC时它们非常相似。