0
當分析SimpleEKDemo application from Apple我注意到有一些內存泄漏。爲什麼SimpleEKDemo代碼中存在內存泄漏?
一個泄漏的是__NSArrayM其在泄漏塊的歷史,一個malloc /分配/釋放3行。
問題 - 有人可以指出的根源問題嗎? (我想學習如何採取一個漏水的對象被創建,其中的儀器輸出,然後從那裏工作了病根,所以這將是非常有用的)
當分析SimpleEKDemo application from Apple我注意到有一些內存泄漏。爲什麼SimpleEKDemo代碼中存在內存泄漏?
一個泄漏的是__NSArrayM其在泄漏塊的歷史,一個malloc /分配/釋放3行。
問題 - 有人可以指出的根源問題嗎? (我想學習如何採取一個漏水的對象被創建,其中的儀器輸出,然後從那裏工作了病根,所以這將是非常有用的)
你會發現,當您運行與泄漏演示在viewDidLoad
(負責框架)有泄漏。如果切換到Call Tree
細節,如果你有啓用Invert Call Tree
,你會看到與呼叫+[NSArray new]
相關的泄漏。如果您打開一點,你會看到initWithArray
這就是所謂的RootViewController
的viewDidLoad
。問題位,
self.eventsList = [[NSMutableArray alloc] initWithArray:0];
eventsList
是retain
ED屬性,以便創建該對象具有2的保留計數然而它只是release
ð一次或者通過release
在dealloc
或通過eventsList
重新分配。你必須自動釋放這個對象。
self.eventsList = [[[NSMutableArray alloc] initWithArray:0] autorelease];
修好後,你不應該得到任何錯誤。
哦 - 所以你的意思是,如果你有「保留」的屬性,那麼你要小心,以通過創建「黃金」爲它的變量,因爲它有效地意味着兩(2)保留計數不是一(1)?那是對的嗎? (如果是的話 - 那麼我已經學到了一個很好的教訓,但我沒有意識到這一點) – Greg 2011-05-30 06:06:08
'alloc'創建一個保留計數爲1的實例,但是對'retain'屬性的賦值給實例添加了一個'retain'調用使保留計數2. – 2011-05-30 06:10:09
好的謝謝 - 我想我必須在此基礎上查看整個代碼堆:) – Greg 2011-05-30 06:12:12