聲明:一下文章屬于復(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)記,并顯示占比。
獲取 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é)果;