Objective-C成员初始化自动释放的对象

时间:2009-11-06 19:58:45

标签: iphone objective-c memory-management

嘿,如果我有一些属性,如

@interface MyClass {
   NSArray* myArray;
}
@end

@property (retain, nonatomic) NSArray* myArray;

在我的init方法中,我应该做类似

的事情
myArray = [[NSArray array] retain];

或者

self.myArray = [NSArray array];

我认为前者会更受欢迎,因为更清楚的是发生了什么?如果你在实现中与成员的属性进行交互或者严格使用成员本身,我想另一种表达它的方法应该是?

2 个答案:

答案 0 :(得分:8)

第一个是首选的,因为如果你通过访问器,它可以触发KVO通知,如果您的子类是对象,这可能会导致奇怪的问题。

答案 1 :(得分:1)

除了维护OOP范例之外,设置器的一个重点是正确释放先前保留的值。由于你处于初始阶段,因此通常可以假设没有现有值,所以你不会因为使用setter而获得任何收益。