XcodeDebug---Instrument

參考

使用Xcode和Instruments調試解決iOS內存泄露

iOS系列教程之用instruments來檢驗你的app

這裏我們來探索怎麼用instruments工具來提高你app性能和穩定性.

Instrument簡介

這將確保所有的面板都打開。現在,研究下面的截圖和它下面的每個部分的解釋:

1. 錄控按鈕。中間的紅色按鈕將停止與啓動它被點擊時,應用程序目前正在分析。注意這實際上是停止和啓動應用程序,而不是暫停它。  

2. 運行定時器和運行導航,定時器顯示APP已經運行了多長時間,箭頭之間是可以移動的。如果停止,然後使用錄製按鈕重新啓動應用程序,這將開始一個新的運行。顯示屏便會顯示“run2 of 2”,你可以回到第一次運行的數據,首先你停止當前運行,然後按下左箭頭回去。  

3. 運行軌道.   

4. 擴展面板,在時間探查儀器的情況下,它是用來跟蹤顯示堆棧  

5. 詳細地面板。它顯示了你正在使用的儀器的主要信息,這是使用頻率最高的部門,可以從它這裏看到cpu運行的時間   

6. 選項面板 稍後介紹

重頭戲來了.

以下介紹下配置選項:

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.花費的時間,這非常真有用,因爲它可以讓你每次下到調用堆棧時挑最大的時間數字,歸零在你最耗時的方法。

Time Profile

我在按鈕方法裏面寫了個循環來測試一下
- (void)runLoop
{
    for (long  i = 0; i < 10000; i++) {
        NSLog(@"long int %ld", i);
    }
}


Leaks

先下載一個實現準備好的內存泄露的Demo吧:leak app
分析內存泄露不能把所有的內存泄露查出來,有的內存泄露是在運行時,用戶操作時才產生的。那就需要用到Instruments了。
 
按上面操作,build成功後跳出Instruments工具,選擇Leaks選項,這時候壽司程序也運行起來了,選中list中的項,拖動等操作後,工具顯示效果如下:


大家可能都能猜到,紅色的柱子表示內存泄露了。怎麼通過這個工具看到在哪泄露了呢?
先在工具欄按下紅色的圓形按鈕,把工具監視內存的活動停下來。選擇Leak,然後點中間十字交叉那,選擇Call Tree.


這時候左下角的Call Tree的可選項可以選了。選中Invert Call Tree 和Hide System Libraries,顯示如下:

這時候內存泄露的具體代碼找到了,在右邊的紅色框框裏指定了哪個方法出現了內存泄露。
你只要在這些方法上雙擊,就會跳轉到具體的代碼,哈哈,是不是很方便。

這裏應該是提示100%內存會泄露。

Cocoa Layout


(其實這裏寬度不需要)

加載的時候修改了按鈕的寬度限制self.width.constant = 200;


抓到衝突的地方

發佈了22 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章