Instruments
如何打開instruments? Xcode-Open Developer Tool-
它里面的工具有很多,常用:
1->Time Profiler:性能分析(對(duì)iOS設(shè)備進(jìn)行性能測(cè)試,主要是查看程序哪些部分最耗時(shí) -Profile->instruments->Time Profiler)
2->Zombies:檢查是否訪問了僵尸對(duì)象,但是這個(gè)工具只能從上往下檢查不智能
3->Allocations:用來(lái)檢查內(nèi)存,寫算法的也用這個(gè)來(lái)檢查
4->Leaks:檢查內(nèi)存,看是否有內(nèi)存泄漏(檢查內(nèi)存泄漏:也可以用- - 靜態(tài)分析 analyze)
5->Network 用鏈接工具分析你的程序如何使用TCP/IP和UDP/IP鏈接
6->Automation(自動(dòng)化):這個(gè)模板執(zhí)行它模擬用戶界面交互為IOS機(jī)應(yīng)用從instrument啟動(dòng)的腳本;可以將一些特定流程寫成腳本來(lái)執(zhí)行?
Time Profiler
可以查看多個(gè)線程里那些方法費(fèi)時(shí)過多的方法。先將右側(cè)Hide System Libraries打上勾,這樣能夠過濾信息。然后在Call Tree上會(huì)默認(rèn)按照費(fèi)時(shí)的線程進(jìn)行排序,單個(gè)線程中會(huì)也會(huì)按照對(duì)應(yīng)的費(fèi)時(shí)方法排序,選擇方法后能夠通過右側(cè)Heaviest Stack Trace里雙擊查看到具體的費(fèi)時(shí)操作代碼,從而能夠有針對(duì)性的優(yōu)化,而不需要在一些本來(lái)就不會(huì)怎么影響性能的地方過度優(yōu)化。啟動(dòng)Timer Profiler 和app后,操作app可以查看執(zhí)行時(shí)間,如下圖
找到最耗時(shí)的操作:
勾選Top Functions.
Allocations
這里可以對(duì)每個(gè)動(dòng)作的前后進(jìn)行Generations,對(duì)比內(nèi)存的增加,查看使內(nèi)存增加的具體的方法和代碼所在位置。具體操作是在右側(cè)Generation Analysis里點(diǎn)擊Mark Generation,這樣會(huì)產(chǎn)生一個(gè)Generation,切換到其他頁(yè)面或一段時(shí)間產(chǎn)生了另外一個(gè)事件時(shí)再點(diǎn)Mark Generation來(lái)產(chǎn)生一個(gè)新的Generation,這樣反復(fù),生成多個(gè)Generation,查看這幾個(gè)Generation會(huì)看到Growth的大小,如果太大可以點(diǎn)進(jìn)去查看相應(yīng)占用較大的線程里右側(cè)Heaviest Stack Trace里查看對(duì)應(yīng)的代碼塊,然后進(jìn)行相應(yīng)的處理。
Leaks
動(dòng)態(tài)檢測(cè)內(nèi)存工具。可以在上面區(qū)域的Leaks部分看到對(duì)應(yīng)的時(shí)間點(diǎn)產(chǎn)生的溢出,選擇后在下面區(qū)域的Statistics>Allocation Summary能夠看到泄漏的對(duì)象,同樣可以通過Stack Trace查看到具體對(duì)應(yīng)的代碼區(qū)域。下面為L(zhǎng)eaks頁(yè)面:
如果在3區(qū)域有紅叉,則表示有內(nèi)存泄漏:
檢測(cè)結(jié)果的分析leaks--callTree,另外在右邊區(qū)域:
Separate by Thread ----表示按線程分開做分析這樣更容易揪出那些吃資源的問題線程。特別是對(duì)于主線程,它要處理和渲染所有的接口數(shù)據(jù),一旦受到阻塞,程序必然卡頓或停止響應(yīng)。
Invert Call Tree----表示方向輸出調(diào)用樹;把調(diào)用層級(jí)最深的方法顯示在最上面,更容易找到最耗時(shí)的操作。
Hide System Libraries----表示隱藏系統(tǒng)庫(kù)文件,過濾各種系統(tǒng)調(diào)用。過濾掉各種系統(tǒng)調(diào)用,只顯示自己的代碼調(diào)用。
Flattern Recursion:拼合遞歸。將同一遞歸函數(shù)產(chǎn)生的多條堆棧(因?yàn)檫f歸函數(shù)會(huì)調(diào)用自己)合并為一條。
當(dāng)發(fā)現(xiàn)內(nèi)存泄漏的時(shí)候,為了定位到具體的代碼處,可以先暫停,只要點(diǎn)擊那個(gè)等號(hào)即可。
接著將1的選框選為Call Tree;將右側(cè)的2的選擇調(diào)至中間,如果需要對(duì)Call Tree進(jìn)行限制,將3打上勾;看到4后面如果有箭頭就展開,直到出現(xiàn)類似5的后面沒有箭頭為止,然后雙擊5,他就會(huì)跳到內(nèi)存泄漏處,修復(fù)即可。
Zombies
測(cè)量一般的內(nèi)存使用,專注于檢測(cè)過度釋放的野指針對(duì)象,也提供對(duì)象分配統(tǒng)計(jì),以及主動(dòng)分配的內(nèi)存地址歷史