iOS開發(fā)——Instruments工具調(diào)試

隨著項目的進(jìn)行,APP的優(yōu)化必須要盡早的展開了,所以最近自己在學(xué)習(xí)很多APP的調(diào)試技巧,今天我們就來說說Xcode為我們準(zhǔn)備的自帶的調(diào)試工具。

代碼性能是個避不開的話題。隨著項目的擴(kuò)大和功能的增多,沒經(jīng)過認(rèn)真調(diào)試和優(yōu)化的代碼,要么任性地卡頓運行,要么低調(diào)地崩潰了之……結(jié)果呢,大家用著不高興,開發(fā)者也不開心。

本篇重點討論一下 iOS性能測試中的啟動測試、內(nèi)存泄露測試、CPU測試。

1.啟動測試

測試工具:Instruments > TimeProfile
可在 appDelegate.m中加入一段代碼,來進(jìn)行測試:

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

1)獲得啟動時間

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


圖1 在 TimeProfile中查看啟動時間

2)分析可優(yōu)化空間

首先,需要注意一下右側(cè)欄中的幾個給力的篩選項,如下圖:


圖2 TimeProfile右邊欄

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

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

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


圖3 TimeProfile 代碼行

獲取 APP啟動時間非常簡單,但分析哪些地方可以優(yōu)化,則需要對代碼足夠了解。項目的啟動時間沒有一個特定的值,利用該方法可以提供一個縮小的檢測范圍,盡可能發(fā)現(xiàn)可被優(yōu)化的代碼。

2.內(nèi)存泄露測試

有兩種方法可以采用,第一利用靜態(tài)分析,第二使用Instruments工具集。

1)靜態(tài)分析

在 xcode中長按運行按鈕>Analyze,可啟動代碼靜態(tài)分析。


啟動靜態(tài)分析
這里寫圖片描述

對于 MRC項目,靜態(tài)分析是必要的,對于 ARC項目,靜態(tài)分析作為可選項。
這項檢查只覆蓋代碼編譯時可能存在的問題,但并不能覆蓋代碼運行時。這時,我們還需要結(jié)合動態(tài)分析工具。

2)動態(tài)分析

工具: Allocations,Leaks

【Allocation】

Allocations組件監(jiān)控對象調(diào)用了 alloc方法申請內(nèi)存后的內(nèi)存使用情況,可記錄對象生命周期中內(nèi)存引用計數(shù)的變化,當(dāng)對象被正常釋放后不再繼續(xù)追蹤。

【Leaks】

Leaks監(jiān)控內(nèi)存泄露,一般和 Allocations一起使用,在檢測到內(nèi)存泄露后,通過 Allocations定位到具體的代碼。發(fā)現(xiàn)問題時,監(jiān)控圖會顯示紅條。修改代碼后,再次查看,如果紅色消失則表示內(nèi)存泄露被修復(fù)成功了。

但 Leaks可能會『假摔』,例如每次 APP啟動后,都會顯示幾個紅條,因此 Leaks的使用過程中也需要人工判斷分析。

步驟:
a)運行Profile>Allocations,啟動 APP后實時查看 Allocations\Leaks圖,若 Leaks中出現(xiàn)紅條,則雙擊紅條,切換到 Leaks視圖;


這里寫圖片描述

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


這里寫圖片描述

例如,上面的代碼中,每次初始化都會創(chuàng)建一個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, 運行過程中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輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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