Objective C属性保留计数

时间:2010-09-12 00:57:49

标签: objective-c memory-management

如果我有

等属性
@property (nonatomic, retain) NSArray *myArray;

然后我将其设置如下

[self setMyArray:[[NSArray alloc]init]];

我的保留次数是2吗?

当我在dealloc方法中发布时,仍然会有一个保留计数为1?

2 个答案:

答案 0 :(得分:5)

如果你只使用[[NSArray alloc] init]的返回来设置属性,你实际上有一个太多的引用。

你可以使用[self setMyArray:[NSArray array]]来避免这种情况,因为'array'方法会返回一个自动释放的对象。

或者...

NSArray* newArray = [[NSArray alloc] init];
[self setMyArray:newArray];
[newArray release];

...如果您不想使用自动释放的对象。

答案 1 :(得分:2)

是的,您的保留计数为2.另一个选项是避免这样做:

[self setMyArray:[NSArray array]];

这种方式是自动释放的,如果你发布一次就会在dealloc中处理。

拥有@property(retain)的一个好处是,如果你将它设置为其他东西,它将释放旧值。