2013-02-07 68 views
5

分析應用程序時,我注意到每次執行某些操作(涉及UIViews)時,活動字節數增加約250 KB。XCode - 瞭解分配工具

查看對象列表中,主要(增長)的罪魁禍首隻是讀作「malloc 144字節」。

偶爾我用Allocations工具來發現我保存的對象比我想要的要長,但我不確定如何解釋「malloc」對象。

任何指導將不勝感激。

+0

您是否正在使用核心數據? –

+0

不,但我加載256 UIImageViews並不斷更新他們的圖層。 – achiral

+0

我不確定,我的應用程序也有一些保留的malloc,但我也無法理解它們,我的總內存使用量保持在10兆以下,所以我沒有真正追求任何東西,但id也對一個答案感興趣。 –

回答

11

一對夫婦的想法:

  1. 分配工具是偉大的,但我會專注於Leaks,第一。你有沒有乾淨的健康保險單?

  2. 你是否通過靜態分析器運行你的代碼(「產品」菜單上的「分析」)。特別是在非ARC代碼中,可以識別許多問題。

  3. 您使用ARC嗎?如果是這樣,則縮小搜索範圍。

  4. 你有殭屍打開嗎?這將導致內存不被釋放。確保關閉殭屍。

  5. 您確定您沒有強大的參考週期(又名保留週期)嗎?你可以在視圖控制器的dealloc中放置NSLog或斷點,並確保它已被調用,並確保沒有強引用週期(兩個或多個對象之間的循環引用不會被釋放)。 (如果您沒有dealloc方法,只需添加一個NSLog語句。)未能invalidate重複NSTimer是某些可能會無意中導致強參考週期的極好例子。關鍵問題是你必須確認dealloc正在發生。

  6. 您是否肯定彈出/解散視圖控制器而不是推送/呈現其他視圖控制器的另一個副本? (未能看到NSLogdealloc方法/斷點可以通過這個引起的,除了在之前點討論了有力的參考週期。)

  7. 在你的256(!)圖像視圖你在幹什麼imageNamed設置image屬性? imageNamed方法緩存圖像不會釋放內存,直到您收到內存警告(儘管它只會檢索新圖像時消耗內存,不會重新檢索現有圖像)。

底線,可能有很多可能的問題,並且您的問題中沒有足夠的幫助我們診斷問題。你必須幫助我們縮小問題的範圍。

但是看看你的控制器,並確保他們正在被釋放,就像他們應該。我感覺你對144字節的問題很痛苦,但這不可能是每次消費250kb的罪魁禍首。 malloc更可能是一個問題的症狀,而不是問題的根源,我會專注於上面列出的更基本的東西,然後花費太多時間來追蹤調用的來源。