分析應用程序時,我注意到每次執行某些操作(涉及UIViews)時,活動字節數增加約250 KB。XCode - 瞭解分配工具
查看對象列表中,主要(增長)的罪魁禍首隻是讀作「malloc 144字節」。
偶爾我用Allocations工具來發現我保存的對象比我想要的要長,但我不確定如何解釋「malloc」對象。
任何指導將不勝感激。
分析應用程序時,我注意到每次執行某些操作(涉及UIViews)時,活動字節數增加約250 KB。XCode - 瞭解分配工具
查看對象列表中,主要(增長)的罪魁禍首隻是讀作「malloc 144字節」。
偶爾我用Allocations工具來發現我保存的對象比我想要的要長,但我不確定如何解釋「malloc」對象。
任何指導將不勝感激。
一對夫婦的想法:
分配工具是偉大的,但我會專注於Leaks,第一。你有沒有乾淨的健康保險單?
你是否通過靜態分析器運行你的代碼(「產品」菜單上的「分析」)。特別是在非ARC代碼中,可以識別許多問題。
您使用ARC嗎?如果是這樣,則縮小搜索範圍。
你有殭屍打開嗎?這將導致內存不被釋放。確保關閉殭屍。
您確定您沒有強大的參考週期(又名保留週期)嗎?你可以在視圖控制器的dealloc
中放置NSLog
或斷點,並確保它已被調用,並確保沒有強引用週期(兩個或多個對象之間的循環引用不會被釋放)。 (如果您沒有dealloc
方法,只需添加一個NSLog
語句。)未能invalidate
重複NSTimer
是某些可能會無意中導致強參考週期的極好例子。關鍵問題是你必須確認dealloc
正在發生。
您是否肯定彈出/解散視圖控制器而不是推送/呈現其他視圖控制器的另一個副本? (未能看到NSLog
在dealloc
方法/斷點可以通過這個引起的,除了在之前點討論了有力的參考週期。)
在你的256(!)圖像視圖你在幹什麼imageNamed
設置image
屬性? imageNamed
方法緩存圖像不會釋放內存,直到您收到內存警告(儘管它只會檢索新圖像時消耗內存,不會重新檢索現有圖像)。
底線,可能有很多可能的問題,並且您的問題中沒有足夠的幫助我們診斷問題。你必須幫助我們縮小問題的範圍。
但是看看你的控制器,並確保他們正在被釋放,就像他們應該。我感覺你對144字節的問題很痛苦,但這不可能是每次消費250kb的罪魁禍首。 malloc
更可能是一個問題的症狀,而不是問題的根源,我會專注於上面列出的更基本的東西,然後花費太多時間來追蹤調用的來源。
您是否正在使用核心數據? –
不,但我加載256 UIImageViews並不斷更新他們的圖層。 – achiral
我不確定,我的應用程序也有一些保留的malloc,但我也無法理解它們,我的總內存使用量保持在10兆以下,所以我沒有真正追求任何東西,但id也對一個答案感興趣。 –