2012-09-11 70 views
1

我正在開發iOS應用程序,並遇到低內存警告問題。UIView retainCount爲0,但內存不釋放

我的應用程序正在點擊一個按鈕加載大量子視圖的大視圖。內存使用量增長,這是可以理解的(從30 Mb到80Mb)。但是,當用戶選擇另一個菜單項 - 這個視圖被釋放,但!該應用程序使用的內存量不會減少任何。我用下面的代碼來釋放視圖:

storeView.hidden = YES; 
NSLog(@"%d", [storeView retainCount]); 
[storeView removeFromSuperview]; 
storeView = nil; 

的NSLog在第二行打印:1,所以釋放之後,應該解除分配。我的實現 - (void)dealloc;確實被調用(我在最後一行調用[super dealloc])。但在此之後,我仍然有低的記憶警告。

儀器發現只有幾個泄漏的NSStrings不可能導致記憶警告。

請問您有什麼建議嗎?

+2

忘記retainCount屬性,永遠不要使用它 –

+0

這是非常有益的,謝謝。任何其他建議?該對象確實被釋放 - 它的dealloc方法被調用。然而內存不被釋放。 –

+1

內存消耗的不是視圖本身,而是視圖持有的對象。當你調用'dealloc'時,看看你是否釋放了視圖引用的對象。使用內存分析器運行,並查看內存的位置。 – dasblinkenlight

回答

2

釋放調用會降低保留計數,如果保留計數爲0,它可能會被清除,但不一定是。當保留計數爲零並嘗試訪問變量時,它可能仍然有效,但可能無效。無論如何你都不能指望它。

+0

可能是我應該更好地命名我的問題。重點在於,即使在調用相應視圖的dealloc方法後,內存使用情況也不會減少。 –

+2

然後這不是導致內存警告的這個視圖。 – Alexander