57

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

它是否正确?

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

4

2 回答 2

71

如果是变量:

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

然后将其声明为不带相应@property/的 ivar@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
  • __strong该 ivar 将被ARC 编译器 视为。
  • nil如果它是一个对象,或者它是一个基元,它将被初始化0
于 2011-11-30T17:02:58.823 回答
5

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

于 2011-10-20T12:56:34.403 回答