前言:最近在剛開(kāi)始學(xué)使用Instrument動(dòng)態(tài)檢測(cè)內(nèi)存泄露忌堂,在網(wǎng)上看了很多文章,但大多都是舊版的資料拴曲,界面很多東西已經(jīng)被修改争舞,而且還遇到了幾個(gè)問(wèn)題,所以寫(xiě)下這篇澈灼,記錄下竞川。
打開(kāi)步驟:
先把工程運(yùn)行到手機(jī)或模擬器上(command+R)
-
通過(guò)Xcode --> Open Developer Tool --> instruments --> Leaks方式打開(kāi)(或product-->profile)
打開(kāi)后現(xiàn)在的界面是這樣的(跟之前的有點(diǎn)不一樣店溢,注意看了)
-
點(diǎn)擊左上角紅色開(kāi)始按鈕(由于leak是動(dòng)態(tài)檢測(cè),所以需要我們手動(dòng)操作APP)
注意:檢測(cè)的時(shí)候要選擇你想要檢測(cè)的APP
-
定位內(nèi)存泄露的位置( Leaks里面有紅色X委乌,這說(shuō)明了我們的APP在此處存在內(nèi)存泄露床牧,點(diǎn)擊暫停按鈕)
1、選中有紅色叉的Leaks遭贸,下面有個(gè) 田 字方格戈咳,點(diǎn)開(kāi),選中Call Tree
3、定位到具體代碼處->在詳情面板選中顯示的若干條中的一條变秦,雙擊成榜,會(huì)自動(dòng)跳到內(nèi)存泄露代碼處,然后點(diǎn)擊右上角 Xcode 圖標(biāo)進(jìn)行修改Separate By Thread:線程分離,只有這樣才能在調(diào)用路徑中能夠清晰看到占用CPU最大的線程.每個(gè)線程應(yīng)該分開(kāi)考慮著蛙。只有這樣你才能揪出那些大量占用CPU的"重"線程,按線程分開(kāi)做分析耳贬,這樣更容易揪出那些吃資源的問(wèn)題線程踏堡。特別是對(duì)于主線程,它要處理和渲染所有的接口數(shù)據(jù)咒劲,一旦受到阻塞顷蟆,程序必然卡頓或停止響應(yīng)。
Invert Call Tree:從上到下跟蹤堆棧信息.這個(gè)選項(xiàng)可以快捷的看到方法調(diào)用路徑最深方法占用CPU耗時(shí)(這意味著你看到的表中的方法,將已從第0幀開(kāi)始取樣,這通常你是想要的,只有這樣你才能看到CPU中話費(fèi)時(shí)間最深的方法),比如FuncA{FunB{FunC}},勾選后堆棧以C->B->A把調(diào)用層級(jí)最深的C顯示最外面.反向輸出調(diào)用樹(shù)缎患。把調(diào)用層級(jí)最深的方法顯示在最上面慕的,更容易找到最耗時(shí)的操作。
Hide System Libraries:表示隱藏系統(tǒng)的函數(shù)挤渔,調(diào)用這個(gè)就更有用了,勾選后耗時(shí)調(diào)用路徑只會(huì)顯示app耗時(shí)的代碼,性能分析普遍我們都比較關(guān)系自己代碼的耗時(shí)而不是系統(tǒng)的.基本是必選項(xiàng).注意有些代碼耗時(shí)也會(huì)納入系統(tǒng)層級(jí)肮街,可以進(jìn)行勾選前后前后對(duì)執(zhí)行路徑進(jìn)行比對(duì)會(huì)非常有用.因?yàn)橥ǔD阒魂P(guān)心cpu花在自己代碼上的時(shí)間不是系統(tǒng)上的,隱藏系統(tǒng)庫(kù)文件判导。過(guò)濾掉各種系統(tǒng)調(diào)用嫉父,只顯示自己的代碼調(diào)用。隱藏缺失符號(hào)眼刃。如果 dSYM 文件或其他系統(tǒng)架構(gòu)缺失绕辖,列表中會(huì)出現(xiàn)很多奇怪的十六進(jìn)制的數(shù)值,用此選項(xiàng)把這些干擾元素屏蔽掉擂红,讓列表回歸清爽仪际。
Flatten Recursion: 遞歸函數(shù), 每個(gè)堆棧跟蹤一個(gè)條目,拼合遞歸昵骤。將同一遞歸函數(shù)產(chǎn)生的多條堆棧(因?yàn)檫f歸函數(shù)會(huì)調(diào)用自己)合并為一條树碱。
注意:如果你發(fā)現(xiàn)雙擊之后無(wú)法定位到代碼而是 unavailable,這時(shí)候你需要去 build setting 中搜索 debug information format蹦玫,然后選擇第二個(gè)選項(xiàng)DWARF With dSYM File赎婚,重新運(yùn)行檢測(cè)
這樣就定位到代碼了刘绣,你可以去修改了。
具體的修改事例挣输,之后再來(lái)補(bǔ)充吧N撤铩!歧焦!