2011-12-21 64 views
0

我有一个类,其中包含一个名为_contents的NSMutableArray。该数组在创建此类的实例时初始化,并且有一个方法setContentsObject:将一个对象添加到内容中。这是setContentsObject执行:将对象添加到NSArray正在泄漏,但为什么?

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

很简单,和它的作品,但是当我分析使用泄漏仪器我的应用程序的运行,我在一个拿到报告泄漏(标记为“100%”)该方法的一行。我明白addObject:保留了这个对象,但是我以前从来没有遇到过这个问题,而且我也没有看到这个方法可以做更多的事情。

+3

也许你的数组从未被释放。或者,您添加的对象已被保留(而不是自动释放)。 – 2011-12-21 13:38:02

+0

没有看到更多的代码,林不知道我可以帮你。 – 2011-12-21 13:57:42

回答

-1

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

+0

该方法的名称不影响它的工作方式。 (名称*由分析命令使用。) – 2011-12-21 17:53:08

+0

除非启用ARC, – 2012-01-17 19:39:18

0

我已经跑进情况,其中ADDOBJECT泄漏,只需更换该行以insertObject:atIndex修复它。我甚至通过运行几次泄漏测试来证明它。

现在,我可以给你一个确切的原因为什么它泄漏和何时?不是真的......我可以猜测并说后者更精确。我绝对知道它解决了我的问题,只是将它归类为一个bug :)

0

无法告诉没有更多的代码。但是,addObject:将保留您传递它的内容。所以你可以考虑数组“拥有”这个对象,你可以在调用你的addContentsObject:方法后释放它。如上所述,如果没有人每释放一个数组,它所拥有的所有对象也都会被挂起。

您可能想要对泄漏仪器进行的操作是查看泄漏的对象之一,并查看所有参考。

哦,你可能想考虑切换到ARC。