1

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

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

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

4

2 回答 2

3

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

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

您需要实际调用 setter 方法:

[self setTableData:[NSMutableArray array]];

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

self.tableData = [NSMutableArray array];
于 2011-05-14T21:27:11.327 回答
2

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

它应该像这样分配:

self.tableData = [[[NSMutableArray alloc] init] autorelease];
于 2011-05-14T21:26:15.673 回答