XCode Instruments簡單整理

Xcode開發環境,集成了一個名曰:Instruments工具,在XCode的profile選項中打開對應的工具窗口。web

經常使用的有:app

Leaks,內存泄露檢測工具。框架

Allocation,動態分析內存使用狀況。ide

Time Profiler:程序運行耗時檢測工具。函數

Leaks:http://www.jianshu.com/p/0837331875f0工具

文/笨笨的糯糯(簡書做者)
原文連接:http://www.jianshu.com/p/0837331875f0
著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。

性能

第一步:打開Xcode7自帶的Instruments測試

或者:
優化

按上面操做,build成功後跳出Instruments工具,選擇Leaks選項ui

選擇以後界面以下圖:

到這裏以後,咱們前期的準備工做作完啦,下面開始正式的測試!

1.選中Xcode先把程序(command + R)運行起來

2.再選中Xcode,按快捷鍵(command + control + i)運行起來,此時Leaks已經跑起來了

3.因爲Leaks是動態監測,因此咱們須要手動操做APP,一邊操做,一邊觀察Leaks的變化,當出現紅色叉時,就監測到了內存泄露,點擊右上角的第二個,進行暫停檢測(也可繼續檢測,當多個時暫停,一次處理了多個).如圖所示:

4.下面就是定位修改了,此時選中有紅色柱子的Leaks,下面有個"田"字方格,點開,選中Call Tree

顯示以下圖界面


5.下面就是最關鍵的一步,在這個界面的右下角有若干選框,選中Invert Call Tree 和Hide System Libraries,(紅圈範圍內)顯示以下:

 

到這裏就算基本完成啦,這裏顯示的就是內存泄露代碼部分,那麼如今還差一步:定位!

6.選中顯示的若干條中的一條,雙擊,會自動跳到內存泄露代碼處。

7.找到了內存泄露的地方,那麼咱們就能夠修改便可

-------------------------------------------------------分割線----------------------------------------------------

和使用 Instruments的其餘工具同樣,點擊XCode的Product菜單Profile啓動Instruments,選中Allocation選項;

啓動後Allocation面板顯示了內存中的對象佔用曲線,能夠顯示目前中內存分配了哪些對象,對象的數量,以及由哪些函數進行的建立。

左側有幾個比較有用的選項:

All Objects Created

Created & Still Living

Created & Destroyed

Allocation主要用於定位內存使用狀況的。

-------------------------------------------------------分割線--------------------------------------------------

使用Time Profiler的性能分析方法


 

Time Profiler分析原理:它按照固定的時間間隔來跟蹤每個線程的堆棧信息,經過統計比較時間間隔之間的堆棧狀態,來推算某個方法執行了多久,並得到一個近似值。其實從根本上來講與咱們的原始分析方法殊途同歸,只不過其將各個方法消耗的時間統計起來。

和使用 Instruments的其餘工具同樣,點擊XCode的Product菜單Profile啓動Instruments:

選擇Time Profiler工具開始測試,這時會自動啓動模擬器和Time Profiler錄製。

先進行一些App的操做,讓Time Profiler收集足夠的數據,尤爲是你以爲那些有性能瓶頸的地方。

四、五、6所標記的面板是須要關注的:

4是擴展面板,用來跟蹤顯示堆棧;5是詳細地面板,能夠從這裏看到cpu運行的時間都消耗在哪裏;6是選項面板,能夠用來設置Time Profiler的運行參數。

經過對應用的操做,能夠在詳細面板中看到那些最耗時的操做是哪些,並能夠逐行展開查看:

圖標爲黑色頭像的就是Time Profiler給咱們的提示,有可能存在性能瓶頸的地方,能夠逐漸向下展開,找到產生的根本緣由。

好比咱們經過分析,發現[CMTool getNewsTimeFromLong]這個時間格式化函數可能須要優化。

固然這裏只是舉一個例子,性能調優應該首先從總體到細節的順序進行,才能收到最明顯的效果。

Time Profiler參數設置


 

這裏邊幾個選項的含義以下:

Separate by Thread: 每一個線程應該分開考慮。只有這樣你才能揪出那些大量佔用CPU的"重"線程  

Invert Call Tree: 從上倒下跟蹤堆棧,這意味着你看到的表中的方法,將已從第0幀開始取樣,這一般你是想要的,只有這樣你才能看到CPU中話費時間最深的方法.也就是說FuncA{FunB{FunC}} 勾選此項後堆棧以C->B-A 把調用層級最深的C顯示在最外面

Hide Missing Symbols: 若是dSYM沒法找到你的app或者系統框架的話,那麼表中看不到方法名只能看到十六進制的數值,若是勾線此項能夠隱藏這些符號,便於簡化數據

Hide System Libraries: 勾選此項你會顯示你app的代碼,這是很是有用的. 由於一般你只關心cpu花在本身代碼上的時間不是系統上的

Show Obj-C Only: 只顯示oc代碼 ,若是你的程序是像OpenGl這樣的程序,不要勾選側向由於他有多是C++的  

Flatten Recursion: 遞歸函數, 每一個堆棧跟蹤一個條目

Top Functions: 一個函數花費的時間直接在該函數中的總和,以及在函數調用該函數所花費的時間的總時間。所以,若是函數A調用B,那麼A的時間報告在A花費的時間加上B花費的時間,這很是真有用,由於它可讓你每次下到調用堆棧時挑最大的時間數字,歸零在你最耗時的方法。

上面的參數在實踐中合理設置,也沒有什麼太多技巧,就是經過數據的隱藏、顯示讓咱們更關注於想找到的數據。

天下應用,惟快不破!尤爲是手機應用,更應該注意用戶體驗和響應速度。


以上就是XCode自帶的關於內存,對象使用狀況的三個比較經常使用的工具大概的使用方法,本身這裏也是大體的記錄下,網上定有比較全面和細緻的教程,由於只是工具,懂的如何使用就好,這裏感謝原做者的貢獻。

相關文章
相關標籤/搜索