据我了解,现在设置 ivar 会保留分配给它的对象,因为设置变量默认为strong
限定符。因为 ivars 在声明它们的strong
对象的范围内,并在变量范围内保留对象,这意味着当包含 ivar 的对象仍然存在时,永远不会释放 ivars 值。
它是否正确?
如果是这样,我是否认为在内存管理方面,保留(强)属性和简单的 ivar 之间没有区别了?
据我了解,现在设置 ivar 会保留分配给它的对象,因为设置变量默认为strong
限定符。因为 ivars 在声明它们的strong
对象的范围内,并在变量范围内保留对象,这意味着当包含 ivar 的对象仍然存在时,永远不会释放 ivars 值。
它是否正确?
如果是这样,我是否认为在内存管理方面,保留(强)属性和简单的 ivar 之间没有区别了?
如果是变量:
然后将其声明为不带相应@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
。您不能使用KVO并使用实例变量执行自定义 getter 和 setter,除非它们在使用 ARC 时非常相似。