instrument調(diào)試(待補(bǔ)充)

題外話:

我相信90%以上的iOS開發(fā)者不經(jīng)常使用xcode提供的instrument調(diào)試工具,畢竟用戶的實(shí)際體驗(yàn)才是第一感覺。既然xcode有這個(gè)工具,還是要研究下的:

遇到第一個(gè)問題:

instrument無法選擇真機(jī),無法進(jìn)行下一步操作了,這個(gè)重啟下xcode和iPhone就ok了

幾個(gè)工具:

Instruments 提供了很多功能,我會(huì)重點(diǎn)介紹一下我最常用的三大類:

Time Profiler:分析代碼的執(zhí)行時(shí)間,找出導(dǎo)致程序變慢的原因。

Allocations:監(jiān)測內(nèi)存使用/分配情況

迅速膨脹的內(nèi)存可以很快讓程序斃命,所以要多加防范。

Leaks:找到引發(fā)內(nèi)存泄漏的起點(diǎn)

即使有 ARC(自動(dòng)引用計(jì)數(shù))內(nèi)存管理機(jī)制,但在現(xiàn)實(shí)中對(duì)象之間引用復(fù)雜,循環(huán)引用導(dǎo)致的內(nèi)存泄漏仍然難以避免,所以關(guān)鍵時(shí)刻還要自力更生。

一、Time Profiler(函數(shù)調(diào)用時(shí)間)

幾個(gè)概念:

Separate By Thread:線程分離,只有這樣才能在調(diào)用路徑中能夠清晰看到占用CPU最大的線程.

Invert Call Tree:從上到下跟蹤堆棧信息.這個(gè)選項(xiàng)可以快捷的看到方法調(diào)用路徑最深方法占用CPU耗時(shí),比如FuncA{FunB{FunC}},勾選后堆棧以C->B->A把調(diào)用層級(jí)最深的C顯示最外面.

Hide Missing Symbols:如果dSYM無法找到你的APP或者調(diào)用系統(tǒng)框架的話,那么表中將看到調(diào)用方法名只能看到16進(jìn)制的數(shù)值,勾選這個(gè)選項(xiàng)則可以隱藏這些符號(hào),便于簡化分析數(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ì)非常有用.

系統(tǒng)和應(yīng)用本身一些調(diào)用路徑完全揉捏在一起.完全看不到我們關(guān)心的應(yīng)用程序中實(shí)際代碼執(zhí)行耗時(shí)和代碼路徑實(shí)際所在位置.簡單的方式可以快速勾選右邊Call Tree中Separate Thread和Hide System Libraries兩個(gè)選項(xiàng)[后面會(huì)解釋選項(xiàng)作用]:

基本操作:點(diǎn)擊右邊設(shè)置選項(xiàng),線程分離、過濾掉系統(tǒng)性能分析。查看列表耗時(shí)線程堆棧信息,點(diǎn)擊可在右側(cè)看到具體函數(shù)。可跳入xcode查看函數(shù)。這里需要注意的是,工具把延時(shí)動(dòng)畫時(shí)間也計(jì)入到函數(shù)執(zhí)行時(shí)間,所以不能僅僅依靠數(shù)據(jù)時(shí)間大小來單純判定函數(shù)是否耗時(shí)。


二、Allocations(內(nèi)存分配)

這里只是摘抄作者的部分文章,作者寫的真的很全很全……

內(nèi)存情況 ??

我們可以驚訝的看到All Heap Allocations(真實(shí)內(nèi)存)只有5.47,而All Anonymous VM(虛擬內(nèi)存:為程序分配的虛擬內(nèi)存,當(dāng)程序有需要的時(shí)候,能夠及時(shí)為程序提供足夠的內(nèi)存空間,而不會(huì)現(xiàn)用現(xiàn)創(chuàng)建)高達(dá)17.2,所以手機(jī)分配給我們的內(nèi)存是22.68;我們現(xiàn)在不檢測內(nèi)存泄漏(是另外一個(gè)工具),所以我們盡量優(yōu)化VM(因?yàn)椴皇莂pp真實(shí)占用的內(nèi)存,只是系統(tǒng)分配的),而VM主要由以下三部分組成:

1.VM:ImageIO_PNG_Data

這里原作者用的自動(dòng)釋放池。

2.VM:CG raster data

這里原作者用的sd框架的方法,在delegate實(shí)現(xiàn),確實(shí)減少了內(nèi)存占用。我這里暫時(shí)沒有去實(shí)踐。

3.VM:CoreAnimation

暫未解決

另外:Allocations工具右側(cè)mark generation標(biāo)記功能,可對(duì)比前后操作內(nèi)存增加量

參考文章寫得很清楚,本文下面有傳送門。


這個(gè)主要是參照其他人的文章啦

Time Profiler:(傳送門

Allocations: (傳送門)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容