NSMutableArray发布了吗?

时间:2011-05-14 21:22:06

标签: objective-c cocoa memory-management retaincount

我有一个NSMutableArray,其属性是(非原子的,保留),并且由于某种原因它被释放了,这是我分配时的代码(tableData是NSMutableArray):

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

当我分配它时,它的保留计数为1.当我将它分配给tableData时,它的保留计数为2.然后使用自动释放,在runloop结束时它应该转到1(这就是我想要的)。但这不会发生。稍后,当我引用它并运行一个方法时,我得到随机对象(上次它是UITabBarSwappableImageView)并且它表示发送了无法识别的选择器。这是有道理的......对象正在被释放,而其他一些对象正在取而代之......但为什么它会被释放? 感谢。

2 个答案:

答案 0 :(得分:3)

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

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

您需要实际调用setter方法:

[self setTableData:[NSMutableArray array]];

或者如果您更喜欢点语法:

self.tableData = [NSMutableArray array];

答案 1 :(得分:2)

您是否使用了点语法?如果不是,则不使用合成的设定器,因此不保留参考。

它应该像这样分配:

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