2011-12-21 63 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。