如果我有
等属性@property (nonatomic, retain) NSArray *myArray;
然后我将其设置如下
[self setMyArray:[[NSArray alloc]init]];
我的保留次数是2吗?
当我在dealloc
方法中发布时,仍然会有一个保留计数为1?
答案 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)的一个好处是,如果你将它设置为其他东西,它将释放旧值。