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:
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、既然找到了記憶體洩露出,修改即可