iOS開發 如何檢查內存泄漏
在開發的時候內存泄漏是不可避免的,但是也是我們需要盡量減少的,因為內存泄漏可能會很大程度的影響程序的穩定性!??!最近一陣在瘋狂的查詢內存泄漏問題,總結有幾種方法供大家參考。
1.靜態分析
通過靜態分析我們可以最初步的了解到代碼的一些不規范的地方或者是存在的內存泄漏,這是我們***步對內存泄漏的檢測。當然有一些警告并不是我們關心的可以略過。
2.通過instruments來檢查內存泄漏
這個方法能粗略的定位我們在哪里發生了內存泄漏。方法是完成一個循環操作,如果內存增長為0就證明我們程序在該次循環操作中不存在內存泄漏,如果內存增長不為0那證明有可能存在內存泄漏,當然具體問題需要具體分析。
3.代碼測試內存泄漏
在做這項工作之前我們要注意一下,在dealloc的方法中我們是否已經釋放了該對象所擁有的所有對象。觀察對象的生成和銷毀是否配對。準確的說就是 init(創建對象的方法)和dealloc是否會被成對觸發(簡單說來就是走一次創建對象就有走一次dealloc該對象)。
下面是自己遇到的一些比較隱秘的造成內存泄漏的情況:
1.兩個對象互相擁有:也就是說對象a里面retain/addSubview了b對象,b對象同時也retain/addSubView了a對象。注意:delegate不要用retain屬性,要用assign屬性也會導致互相擁有。
2.有時候需要用removeFromSuperView來釋放:具體說明,也許我的a對象擁有一個b對象,b對象add到了c對象上,而在我們的設計中b對象的生命周期應該和a對象相同;這時候只一句[b release]/self.b = nil是不能把b對象釋放掉的(一般情況下release會使其retainCount-1,[super dealloc]會再次將所有subView的retainCount-1,而b并不是a的subView,所有***的一次-1沒有了);所以我們需要在之前加上[b removeFromSuperView]。
希望大家都一起分享一下自己遇到過的比較隱秘的內存泄漏方式。