關于內存泄漏如何檢測,Xcode自帶Instruments工具可以顯示,但是有個小問題,網上復制粘貼的文章只字不提,
內存泄漏地方只能看到地址,而不是具體的代碼行
,簡直就是坑啊.所以這里重點提一下,下邊是通用的操作流程,熟悉的童鞋可以忽略,喝咖啡去.
1.最最重要的第一步
Paste_Image.png
Xcode編譯項目后,我們會看到一個同名的 dSYM 文件,dSYM 是保存 16 進制函數地址映射信息的中轉文件,我們調試的 symbols 都會包含在這個文件中,并且每次編譯項目的時候都會生成一個新的 dSYM 文件。回到上面的問題,如果在后邊顯示0xedc00與0xedbda是因為我們的工程build settings 的問題,沒有生成dSYM 文件,也就無法解析debug symbols。
具體操作
1.開啟Xcode自帶的Instruments
或者:
按上面操作,build成功后跳出Instruments工具,選擇Leaks選項
選擇之后界面如下圖:
到這里之后,我們前期的準備工作做完啦,下面開始正式的測試!
1.選中Xcode先把程序(command + R)運行起來
2.再選中Xcode,按快捷鍵(command + control + i)運行起來,此時Leaks已經跑起來了
3.由于Leaks是動態監測,所以我們需要手動操作APP,一邊操作,一邊觀察Leaks的變化,當出現紅色叉時,就監測到了內存泄露,點擊右上角的第二個,進行暫停檢測(也可繼續檢測,當多個時暫停,一次處理了多個).如圖所示:
Paste_Image.png
4.下面就是定位修改了,此時選中有紅色柱子的Leaks,下面有個"田"字方格,點開,選中Call Tree
顯示如下圖界面(兩個對比)
5.下面就是最關鍵的一步,在這個界面的右下角有若干選框,選中Invert Call Tree 和Hide System Libraries,(紅圈范圍內)顯示如下:
到這里就算基本完成啦,這里顯示的就是內存泄露代碼部分,那么現在還差一步:定位!
6.選中顯示的若干條中的一條,雙擊,會自動跳到內存泄露代碼處,如圖所示
Paste_Image.png