Instruments工具調(diào)試

聲明:一下文章屬于復(fù)制粘貼,這里使用時(shí)為了方便查找.原文作者-Originalee

說說Xcode為我們準(zhǔn)備的自帶的調(diào)試工具。
代碼性能是個(gè)避不開的話題。隨著項(xiàng)目的擴(kuò)大和功能的增多,沒經(jīng)過認(rèn)真調(diào)試和優(yōu)化的代碼,要么任性地卡頓運(yùn)行,要么低調(diào)地崩潰了之……結(jié)果呢,大家用著不高興,開發(fā)者也不開心。
本篇重點(diǎn)討論一下 iOS性能測試中的啟動測試、內(nèi)存泄露測試、CPU測試。
1.啟動測試
測試工具:Instruments > TimeProfile可在 appDelegate.m中加入一段代碼,來進(jìn)行測試:

- (void)testLaunch{ 
     for(int i = 0; i < 100000;i++){ 
        NSLog(@"test"); 
     }
}

1)獲得啟動時(shí)間
APP啟動之后,中止 TimeProfile,按住 option鍵在監(jiān)控窗口中拖拽,選中監(jiān)控區(qū)域中起始點(diǎn)到打開 APP后的峰谷,查看APP啟動所需時(shí)間,如下圖:


圖1 在 TimeProfile中查看啟動時(shí)間

2)分析可優(yōu)化空間
首先,需要注意一下右側(cè)欄中的幾個(gè)給力的篩選項(xiàng),如下圖:



圖2 TimeProfile右邊欄

(注:我覺得非常常用的標(biāo)記為『必選項(xiàng)』)

Separate by Thread //按線程聚類,『可選項(xiàng)』,當(dāng)我們想查看每個(gè)線程中哪些方法比較耗時(shí)時(shí),勾選它;
Invert Call Tree //反轉(zhuǎn)調(diào)用棧信息,『必選項(xiàng)』,否則 main一直排在最上面,礙事;
Hide System Libraries //隱藏系統(tǒng)庫,『可選項(xiàng)』,只查看自己應(yīng)用的棧信息;
Top Functions //按耗時(shí)降序排列,『必選項(xiàng)』

Running Time 列中顯示運(yùn)行每個(gè)方法所耗費(fèi)的時(shí)間,根據(jù)耗時(shí)和占比猜測是否有代碼需要優(yōu)化。雙擊中間主窗口中的方法名進(jìn)入具體的代碼行查看,耗時(shí)多的代碼行有顏色標(biāo)記,并顯示占比。

圖3 TimeProfile 代碼行

獲取 APP啟動時(shí)間非常簡單,但分析哪些地方可以優(yōu)化,則需要對代碼足夠了解。項(xiàng)目的啟動時(shí)間沒有一個(gè)特定的值,利用該方法可以提供一個(gè)縮小的檢測范圍,盡可能發(fā)現(xiàn)可被優(yōu)化的代碼。
2.內(nèi)存泄露測試
有兩種方法可以采用,第一利用靜態(tài)分析,第二使用Instruments工具集。
1)靜態(tài)分析
xcode 中長按運(yùn)行按鈕 > Analyze,可啟動代碼靜態(tài)分析。


啟動靜態(tài)分析


這里寫圖片描述

對于 MRC 項(xiàng)目,靜態(tài)分析是必要的,對于 ARC項(xiàng)目,靜態(tài)分析作為可選項(xiàng)。這項(xiàng)檢查只覆蓋代碼編譯時(shí)可能存在的問題,但并不能覆蓋代碼運(yùn)行時(shí)。這時(shí),我們還需要結(jié)合動態(tài)分析工具。
2)動態(tài)分析
工具: Allocations,Leaks
【Allocation】
Allocations組件監(jiān)控對象調(diào)用了 alloc方法申請內(nèi)存后的內(nèi)存使用情況,可記錄對象生命周期中內(nèi)存引用計(jì)數(shù)的變化,當(dāng)對象被正常釋放后不再繼續(xù)追蹤。
【Leaks】
Leaks監(jiān)控內(nèi)存泄露,一般和 Allocations一起使用,在檢測到內(nèi)存泄露后,通過 Allocations定位到具體的代碼。發(fā)現(xiàn)問題時(shí),監(jiān)控圖會顯示紅條。修改代碼后,再次查看,如果紅色消失則表示內(nèi)存泄露被修復(fù)成功了。
Leaks可能會『假摔』,例如每次 APP啟動后,都會顯示幾個(gè)紅條,因此 Leaks的使用過程中也需要人工判斷分析。
步驟:a)運(yùn)行Profile>Allocations,啟動 APP后實(shí)時(shí)查看 Allocations\Leaks圖,若 Leaks中出現(xiàn)紅條,則雙擊紅條,切換到 Leaks視圖;

這里寫圖片描述

b) 選擇右側(cè)欄查看 stack trace,點(diǎn)擊黑色圖標(biāo)(非系統(tǒng)類),查看具體的代碼實(shí)現(xiàn),分析可能出現(xiàn)的問題,如下圖:


這里寫圖片描述

例如,上面的代碼中,每次初始化都會創(chuàng)建一個(gè)NSMutableArray 對象,可以優(yōu)化為removeAllObject后重利用。
3)CPU等指標(biāo)
工具:Activity Monitor可監(jiān)控 CPU內(nèi)存指標(biāo),并可對比多次監(jiān)控的結(jié)果。
步驟:
a) profile>Activity Monitor 啟動 APP, 運(yùn)行過程中option選擇峰值查看 cpu內(nèi)存使用量
b) 對比多次監(jiān)控的結(jié)果,把最差情況作為最終結(jié)果;

ActivityMonitor

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 隨著項(xiàng)目的進(jìn)行,APP的優(yōu)化必須要盡早的展開了,所以最近自己在學(xué)習(xí)很多APP的調(diào)試技巧,今天我們就來說說Xcode...
    Originalee閱讀 1,445評論 0 24
  • 版本記錄 前言 我們在做app的時(shí)候,不是做完功能就結(jié)束了,很多時(shí)候是需要進(jìn)行檢查和優(yōu)化的,而xcode自帶了一個(gè)...
    刀客傳奇閱讀 3,137評論 0 1
  • 性能對于一款app來說至關(guān)重要,而程序的內(nèi)存占用情況就是一項(xiàng)很重要的性能指標(biāo)。雖然iOS 5.0版本之后加入了AR...
    樹根曰閱讀 2,857評論 0 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,001評論 25 709
  • 《過去》 文/鐵木迭兒 過去了就是過去 過去的不會再來 再來也不是過去 過去是抹不掉的記憶 記憶有禁錮時(shí)光的魅力 ...
    鐵牟閱讀 143評論 11 3

友情鏈接更多精彩內(nèi)容