在ARC时代的财产与伊娃

这是我的理解是,设置一个伊娃现在保留对象分配给它,因为设置variables默认为strong限定符。 因为ivars处于声明对象的范围内,并且strong保留了variables范围内的对象,这意味着在包含ivar的对象仍然活着时,ivars值永远不会被释放。

它是否正确?

如果是这样的话,我认为从内存pipe理的angular度来看,保留(强)财产和简单的伊娃之间没有区别吗?

如果一个variables:

  1. 在使用ARC的类中声明。
  2. 仅用于类实现(不作为类接口的一部分公开)。
  3. 不需要任何KVO 。
  4. 不需要任何自定义getter / setter。

然后把它声明为没有相应的@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 
  • 这个ivar将被ARC编译器视为__strong
  • 如果它是一个对象,它将被初始化nil ,如果它是一个基元,则被初始化为0

你不能使用KVO,并且使用ARC之外的实例variables来定制getter和setter,但是它们非常相似。

    Interesting Posts