1. 程式人生 > >iOS. Instruments的使用

iOS. Instruments的使用

========================================

time profile的使用

1.點選你的跟蹤文件下面的 Library 按鈕,或者選擇 Window > Library。 

2.勾選右邊Call Tree中Separate Thread和Hide System Libraries兩個選項,剔除掉了系統相關方法和反向呼叫樹路徑

3.

這裡對右側call tree選項有必要做一下說明[官方user guide翻譯]:

Separate By Thread:執行緒分離,只有這樣才能在呼叫路徑中能夠清晰看到佔用CPU最大的執行緒.

Invert Call Tree:

從上到下跟蹤堆疊資訊.這個選項可以快捷的看到方法呼叫路徑最深方法佔用CPU耗時,比如FuncA{FunB{FunC}},勾選後堆疊以C->B->A把呼叫層級最深的C顯示最外面. 

Hide Missing Symbols:如果dSYM無法找到你的APP或者呼叫系統框架的話,那麼表中將看到呼叫方法名只能看到16進位制的數值,勾選這個選項則可以隱藏這些符號,便於簡化分析資料.

Hide System Libraries:這個就更有用了,勾選後耗時呼叫路徑只會顯示app耗時的程式碼,效能分析普遍我們都比較關係自己程式碼的耗時而不是系統的.基本是必選項.注意有些程式碼耗時也會納入系統層級,可以進行勾選前後前後對執行路徑進行比對會非常有用.

======================================

Analyze (shift+command+b)檢測記憶體洩露product----Analyze

app不crash了,那看看有沒有記憶體洩露。用XCode的Analyze就能分析到哪裡有記憶體洩露

技術分享

分析之後可以看到:

技術分享

這裡提示alertView沒被釋放,有記憶體洩露,那我們釋放

    [alertView release];

再分析,這個問題解決了。

Analyze 分析記憶體 檢測出現 User-facing text should use localized string macro 警告問題:

Analyze也可以邏輯錯誤監測:

****** Allocations,leak檢測記憶體洩露

一個叫(分配)Allocations,以及一個被稱為VM Tracker(虛擬機器跟蹤)。

有隱藏的專案,你可能不知道有東西在那兒。你可能已經聽說了記憶體洩漏。但你可能不知道的是,其實有兩種洩漏。

第一個是真正的記憶體洩漏,一個物件尚未被釋放,但是不再被引用的了。因此,儲存器不能被重新使用。-----用leak;

第二類洩漏是比較麻煩一些。這就是所謂的“無界記憶體增長”。這發生在記憶體繼續分配,並永遠不會有機會被釋放。

如果永遠這樣下去你的程式佔用的記憶體會無限大,當超過一定記憶體的話 會被系統的看門狗給kill掉.

***leaks工具 (command + control + i)

分析記憶體洩露不能把所有的記憶體洩露查出來,有的記憶體洩露是在執行時,使用者操作時才產生的。那就需要用到Instruments了。

技術分享

或者 

技術分享

選擇第一個 Instruments

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

顯示介面如圖,然後選擇Leaks

技術分享

選擇後介面如圖

技術分享

好到這裡準備工作就算做完啦,開始正式的測試

關鍵的幾步

1、首先我們選中Xcode先把模擬器(command + R)執行起來

2、然後我們再選中Xcode,按快捷鍵(command + control + i)執行起來,

此時Leaks已經跑起來了,我們可以狠明顯的看到,

3、由於Leaks是動態監測,所以我們需要手動操作APP,進行測試,一邊操作APP,一邊觀察Leaks的變化,

當出現紅色柱子時,恭喜你監測到了記憶體洩露,點選右上角的第二個,進行暫停檢測(也可繼續檢測,當多個時暫停,一次處理了多個),

下面就是定位修改了

技術分享

4、此時選中有紅色柱子的Leaks,下面有個"田"字方格,點開,選中Call Tree

技術分享

顯示介面如圖

技術分享

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

技術分享

到這裡就算基本完成啦,這裡顯示的兩個,就是記憶體洩露程式碼部分,還差一步:定位

6、選中顯示的若干條中的一天,雙擊,會自動跳到記憶體洩露程式碼處,如圖

技術分享

7、既然找到了記憶體洩露出,修改即可