我的理解是,设置ivar现在会保留分配给它的对象,因为设置变量默认为strong
限定符。因为ivars在声明它们的对象的范围内,并且strong
保留变量范围内的对象,这意味着当包含ivar的对象仍然存活时,永远不会释放ivars值。
这是对的吗?
如果是这样,我是否正确地认为在记忆管理方面,保留(强)属性和简单的ivar之间没有区别?
答案 0 :(得分:69)
如果变量:
然后将其声明为没有相应@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
__strong
。 nil
,如果它是一个基元,它将被初始化为0
。答案 1 :(得分:6)
您不能使用KVO并使用实例变量进行自定义getter和setter,而不是使用ARC时它们非常相似。