我有一个NSMutableArray,其属性是(非原子的,保留),并且由于某种原因它被释放了,这是我分配时的代码(tableData是NSMutableArray):
tableData = [[[NSMutableArray alloc] init] autorelease];
当我分配它时,它的保留计数为1.当我将它分配给tableData时,它的保留计数为2.然后使用自动释放,在runloop结束时它应该转到1(这就是我想要的)。但这不会发生。稍后,当我引用它并运行一个方法时,我得到随机对象(上次它是UITabBarSwappableImageView)并且它表示发送了无法识别的选择器。这是有道理的......对象正在被释放,而其他一些对象正在取而代之......但为什么它会被释放? 感谢。
答案 0 :(得分:3)
它已被释放,因为将其分配给tableData
不会改变保留计数。
您只是将指针值从内存中的一个插槽复制到另一个插槽。而已。不会发送任何消息来表明所有权发生变化。
您需要实际调用setter方法:
[self setTableData:[NSMutableArray array]];
或者如果您更喜欢点语法:
self.tableData = [NSMutableArray array];
答案 1 :(得分:2)
您是否使用了点语法?如果不是,则不使用合成的设定器,因此不保留参考。
它应该像这样分配:
self.tableData = [[[NSMutableArray alloc] init] autorelease];