在ARC时代的财产与伊娃
这是我的理解是,设置一个伊娃现在保留对象分配给它,因为设置variables默认为strong
限定符。 因为ivars处于声明对象的范围内,并且strong
保留了variables范围内的对象,这意味着在包含ivar的对象仍然活着时,ivars值永远不会被释放。
它是否正确?
如果是这样的话,我认为从内存pipe理的angular度来看,保留(强)财产和简单的伊娃之间没有区别吗?
如果一个variables:
- 在使用ARC的类中声明。
- 仅用于类实现(不作为类接口的一部分公开)。
- 不需要任何KVO 。
- 不需要任何自定义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,但是它们非常相似。