将对象添加到NSArray正在泄漏,但为什么呢?

时间:2011-12-21 13:21:04

标签: ios memory-leaks nsmutablearray instruments

我有一个包含名为_contents的NSMutableArray的类。在创建此类的实例时初始化此数组,并且有一个方法setContentsObject:将对象添加到内容中。这是setContentsObject的实现:

- (void)addContentsObject:(id <MyProtocol>)object
{
    [_contents addObject:object];
}

非常简单,而且有效,但是当我使用Leaks仪器分析我的应用程序的运行情况时,我会在该方法的一行上报告泄漏(标记为“100%”)。我理解addObject:保留了对象,但我之前从未遇到过这个问题,我也看不出对这个方法还能做些什么。

3 个答案:

答案 0 :(得分:0)

我遇到了 addObject 泄漏的情况,只需用 insertObject:atIndex 替换该行就可以修复它。我甚至通过运行几次泄漏测试证明了这一点。

现在,我能否准确地说明为什么泄漏以及何时泄漏?不是......我可以猜测并说后者更准确。我当然知道它解决了我的问题并将其归类为一个错误:)

答案 1 :(得分:0)

没有更多代码就无法判断。但是,addObject:将保留您传递的内容。所以你可以认为数组“拥有”了这个对象,你可以在调用addContentsObject:方法后释放它。

正如Hot Licks所提到的,如果没有人发布数组,那么它所拥有的所有对象也会一直存在。

您可能想要使用Leaks仪器查看一个泄漏的对象,并查看所有参考文献。

哦,您可能需要考虑切换到ARC。

答案 2 :(得分:-1)

我很确定它与Obj-C查看方法名称的方式有关。任何带有-copy -add或-new前缀的内容都会为返回的对象添加保留计数。如果您不打算这样做,请尝试重命名该方法一次,看看它是否仍然泄漏。我的猜测是不会。