ad:
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]。
希望大家都一起分享一下自己遇到過的比較隱秘的記憶體洩漏方式。
C C 檢查記憶體洩漏
最近剛換工作,還在試用期,分配給我的也都是些零碎的任務。前陣子領導扔給我乙個小專案,這個專案底層使用c 編寫的3d渲染引擎,然後用cli包裝了一下,提供給上層的c 呼叫。這個專案存在比較嚴重的記憶體洩漏問題,由於目前公司寫c 的人寥寥無幾,寫c 的又不太懂如何檢測c 的記憶體洩漏,領導就把這個小任務...
記憶體洩漏檢查
1.乙個指標多次進行賦值時,每次賦值後使用完後要釋放記憶體 coffsetcoedgemap poffsetcoedgemap polygonoffset ppoly,retpolygon,doffsetdis,enextend,0.1 expect true g ovldmgr.isvalid r...
mtrace檢查記憶體洩漏
記憶體洩漏檢查方法 for linux 如果你更想讀原始文件,請參考glibc info的 allocation debugging 一章 執行info libc glibc提供了乙個檢查記憶體洩漏的方法,前提是你的程式使用glibc的標準函式分配記憶體 如malloc,alloc.1.在需要記憶體...