2011-05-14 47 views
1

我有一个NSMutableArray的,其财产(非原子,保留),而且越来越发布出于某种原因,这里的代码时,我给它分配(资料表是NSMutableArray的):NSMutableArray获得发布?

tableData = [[[NSMutableArray alloc] init] autorelease]; 

当我ALLOC它,它是保留计数是1.当我将它分配给tableData时,它的保留计数是2.然后在自动释放的情况下,在runloop结束时它应该变为1(这是我想要的)。但是这并没有发生。后来,当我参考它并运行一个方法时,我得到了随机对象(上次它是UITabBarSwappableImageView),它表示发送了无法识别的选择器。这是有道理的...对象正在被释放,其他一些对象正在把它放在......但为什么它被释放? 谢谢。

回答

2

你使用了点语法吗?如果不是,则不使用合成的设置器,因此参考不被保留。

应该这样分配:

self.tableData = [[[NSMutableArray alloc] init] autorelease]; 
+1

FML。我怎么错过了?谢谢... – user635064 2011-05-14 21:26:45

3

它变得释放,因为其分配给tableData不会改变保留计数

您只是将指针值从内存中的一个插槽复制到另一个插槽。而已。没有任何消息被分派来表明所有权发生变化。

您需要实际调用setter方法:

[self setTableData:[NSMutableArray array]]; 

或者如果你喜欢点语法:

self.tableData = [NSMutableArray array];