本文總結(jié)了包括Time Profiler、leaks檐涝、Allocation本人認(rèn)為前兩者使用較多异逐,最后的可僅供參考
Time Profiler的使用
作用:
應(yīng)用程序開(kāi)始運(yùn)行后.就能獲取到整個(gè)應(yīng)用程序運(yùn)行消耗時(shí)間分布和百分比.
使用Time Profiler的注意事項(xiàng):
必須使用真機(jī)飒焦,因?yàn)閙acbook上的cpu優(yōu)于iPhone典奉;gpu劣于ipone;
time? profiler使用步驟
在xcode選擇 product--profile得到圖一界面,鐘表為
time profiler
點(diǎn)擊開(kāi)始錄制按鈕得到如圖二:
可以看出圖中包含有調(diào)用系統(tǒng)API所消耗的時(shí)間鳞芙,這些數(shù)據(jù)對(duì)我們來(lái)說(shuō)是無(wú)用的眷柔,因此我們選擇屏蔽它
選用call tree的Separate Thread和Hide System Libraries得如圖三
可以看出剔除了反向調(diào)用樹(shù)和系統(tǒng)API調(diào)用的數(shù)據(jù)。此時(shí)點(diǎn)擊圖中所示方法原朝,可直接跳轉(zhuǎn)至指定代碼驯嘱,對(duì)耗時(shí)的代碼進(jìn)行優(yōu)化,一般耗時(shí)場(chǎng)景主要為UIImageView播放動(dòng)畫(huà)喳坠、NSDateFormatter以及NSCalendar的使用等場(chǎng)景鞠评。
相關(guān)名詞注釋?zhuān)?/p>
Separate By Thread:線(xiàn)程分離,只有這樣才能在調(diào)用路徑中能夠清晰看到占用CPU最大的線(xiàn)程.
Invert Call Tree:從上到下跟蹤堆棧信息.這個(gè)選項(xiàng)可以快捷的看到方法調(diào)用路徑最深方法占用CPU耗時(shí),比如FuncA{FunB{FunC}},勾選后堆棧以C->B->A把調(diào)用層級(jí)最深的C顯示最外面.
Hide Missing Symbols:如果dSYM無(wú)法找到你的APP或者調(diào)用系統(tǒng)框架的話(huà),那么表中將看到調(diào)用方法名只能看到16進(jìn)制的數(shù)值,勾選這個(gè)選項(xiàng)則可以隱藏這些符號(hào)壕鹉,便于簡(jiǎn)化分析數(shù)據(jù).
Hide System Libraries:這個(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ì)非常有用.
至此,timer Profiler的使用總結(jié)結(jié)束御板。
leaks 的使用
打開(kāi)步驟同profiler相同,不再贅述牛郑。
打開(kāi)后第一部將彈出的界面的statistics改為call trees,如圖四
不同于time profiler 此時(shí)選Invert Call Tree和Hide System Libraries
然后點(diǎn)開(kāi)錄制按鈕
出現(xiàn)紅色錯(cuò)號(hào)就說(shuō)明出現(xiàn)了內(nèi)存泄露怠肋,選則左上角的暫停代碼,并用鼠標(biāo)點(diǎn)擊錯(cuò)號(hào)得如圖五淹朋,
點(diǎn)擊任意一行得到如圖六
標(biāo)紅處為內(nèi)存泄露的具體代碼笙各,可對(duì)其修改解決
Allocation
參考自IOS性能調(diào)優(yōu)系列:使用Allocation動(dòng)態(tài)分析內(nèi)存使用情況-愛(ài)編程?
Allocation工具可以用來(lái)幫你了解內(nèi)存的分配情況
打開(kāi)方式同上,略過(guò)础芍,直接上實(shí)料
打開(kāi)后我們可以看到右側(cè)(圖七)幾個(gè)比較有用的選項(xiàng)
All Objects Created
Created & Still Living
Created & Destroyed
通過(guò)以上方法可以對(duì)應(yīng)用的整體內(nèi)存使用情況有所了解杈抢,但內(nèi)存不合理使用導(dǎo)致的內(nèi)存警告往往是部分代碼或視圖導(dǎo)致的,我們往往要關(guān)注于某段時(shí)間或操作過(guò)程中內(nèi)存的分配和使用情況仑性,Allocation提供了這種功能惶楼。
比如在進(jìn)入一個(gè)視圖前或操作前,我們?cè)贏llocation面板左側(cè)點(diǎn)擊Mark Generation诊杆,這時(shí)候會(huì)產(chǎn)生Generation A節(jié)點(diǎn)歼捐,顯示內(nèi)存當(dāng)前的情況:
Generation分別記錄了進(jìn)入前豹储、進(jìn)入后、關(guān)閉后淘这,再最后一個(gè)Generation應(yīng)該內(nèi)存被合理釋放剥扣,否則就代表了在這個(gè)視圖或操作中有泄漏或不合理的地方巩剖。
以上只是Allocation的基本運(yùn)用,設(shè)計(jì)出一套使用Allocation來(lái)合理測(cè)試的方案是比較復(fù)雜的钠怯,后續(xù)慢慢介紹佳魔。