1.建立一個Demo工程(MRC),工程中寫了一個會形成內存泄漏的代碼。架構
2.command + i 打開Instruments工具app
3.雙擊選擇 Leaks, 出現以下界面:ide
4.選擇Leaks, 選擇Call Tree, 勾選Invert Call Tree 和 Hide System Libraries函數
選擇 Call Tree 表示查看整個調用過程工具
.性能
5.點擊左上角 的 大紅點按鈕 啓動Leaks spa
6.Demo中內存泄漏代碼寫在 touchesbegin 中,咱們點擊一下模擬器的屏幕,發現Leaks中出現了一個紅色的 ❌線程
7.按住鼠標左鍵 從 ❌ 的左邊拖到右邊 選中❌。此時Details 中就會出現,內存泄漏的代碼了code
8.雙擊上面的代碼,就會出現具體代碼位置 , 以下圖遞歸
9.點擊右上方的Xcode圖標 就能夠跳到咱們Xcode中的具體代碼中。
而後就去修改你的代碼吧!
補充:
Display Setting 中 Call Tree 選項的說明:
Separate By Thread: 線程分離,只有這樣才能在調用路徑中可以清晰看到佔用CPU最大的線程.每一個線程應該分開考慮。只有這樣你才能揪出那些大量佔用CPU的"重"線程,按線程分開作分析,這樣更容易揪出那些吃資源的問題線程。特別是對於主線程,它要處理和渲染全部的接口數據,一旦受到阻塞,程序必然卡頓或中止響應。
Invert Call Tree:從上到下跟蹤堆棧信息.這個選項能夠快捷的看到方法調用路徑最深方法佔用CPU耗時(這意味着你看到的表中的方法,將已從第0幀開始取樣,這一般你是想要的,只有這樣你才能看到CPU中花費時間最深的方法),好比FuncA{FunB{FunC}},勾選後堆棧以C->B->A把調用層級最深的C顯示最外面.反向輸出調用樹。把調用層級最深的方法顯示在最上面,更容易找到最耗時的操做。
Hide System Libraries:表示隱藏系統的函數,調用這個就更有用了,勾選後耗時調用路徑只會顯示app耗時的代碼,性能分析廣泛咱們都比較關係本身代碼的耗時而不是系統的.基本是必選項.注意有些代碼耗時也會歸入系統層級,能夠進行勾選先後先後對執行路徑進行比對會很是有用.由於一般你只關心cpu花在本身代碼上的時間不是系統上的,隱藏系統庫文件。過濾掉各類系統調用,只顯示本身的代碼調用。隱藏缺失符號。若是 dSYM 文件或其餘系統架構缺失,列表中會出現不少奇怪的十六進制的數值,用此選項把這些干擾元素屏蔽掉,讓列表迴歸清爽。
Flatten Recursion: 遞歸函數, 每一個堆棧跟蹤一個條目,拼合遞歸。將同一遞歸函數產生的多條堆棧(由於遞歸函數會調用本身)合併爲一條。