INSTRUMENTS調(diào)試工具的使用(二十九) —— 分析你App的內(nèi)存使用之找到內(nèi)存泄露(四)

版本記錄

版本號 時間
V1.0 2018.06.15

前言

我們在做app的時候魏颓,不是做完功能就結(jié)束了褂傀,很多時候是需要進(jìn)行檢查和優(yōu)化的万皿,而xcode自帶了一個很好的檢查工具撕氧,可以檢測內(nèi)存泄漏瘤缩。還可以查看哪一個方法比較耗時。還可以檢測離屏渲染等等伦泥,隨后的幾篇我們就說一下這個工具的使用剥啤。感興趣的可以看這幾篇。
1.INSTRUMENTS調(diào)試工具的使用(一)
2.INSTRUMENTS調(diào)試工具的使用(二)
3.INSTRUMENTS調(diào)試工具的使用(三)
4.INSTRUMENTS調(diào)試工具的使用(四)
5.INSTRUMENTS調(diào)試工具的使用(五)
6.INSTRUMENTS調(diào)試工具的使用(六)
7.INSTRUMENTS調(diào)試工具的使用(七)
8.INSTRUMENTS調(diào)試工具的使用(八)
9.INSTRUMENTS調(diào)試工具的使用(九)
10. INSTRUMENTS調(diào)試工具的使用(十)
11. INSTRUMENTS調(diào)試工具的使用(十一) —— 簡介(一)
12. INSTRUMENTS調(diào)試工具的使用(十二) —— 通常任務(wù)之啟動Instruments(一)
13. INSTRUMENTS調(diào)試工具的使用(十三) —— 通常任務(wù)之簡單了解Instruments(二)
14. INSTRUMENTS調(diào)試工具的使用(十四) —— 通常任務(wù)之創(chuàng)建不脯、保存和打開跟蹤文檔(三)
15. INSTRUMENTS調(diào)試工具的使用(十五) —— 通常任務(wù)之指定目標(biāo)應(yīng)用和設(shè)備(四)
16. INSTRUMENTS調(diào)試工具的使用(十六) —— 通常任務(wù)之訪問和使用個別儀器(五)
17. INSTRUMENTS調(diào)試工具的使用(十七) —— 通常任務(wù)之記錄府怯、暫停和停止跟蹤(六)
18. INSTRUMENTS調(diào)試工具的使用(十八) —— 導(dǎo)航收集的數(shù)據(jù)之關(guān)于數(shù)據(jù)分析(一)
19. INSTRUMENTS調(diào)試工具的使用(十九) —— 導(dǎo)航收集的數(shù)據(jù)之導(dǎo)航時間軸窗格(二)
20. INSTRUMENTS調(diào)試工具的使用(二十) —— 導(dǎo)航收集的數(shù)據(jù)之導(dǎo)航詳細(xì)面板(三)
21. INSTRUMENTS調(diào)試工具的使用(二十一) —— 導(dǎo)航收集的數(shù)據(jù)之將數(shù)據(jù)映射到源代碼(四)
22. INSTRUMENTS調(diào)試工具的使用(二十二) —— 導(dǎo)航收集的數(shù)據(jù)之查看您應(yīng)用的源代碼(五)
23. INSTRUMENTS調(diào)試工具的使用(二十三) —— 分析你App的性能之測量CPU使用情況(一)
24. INSTRUMENTS調(diào)試工具的使用(二十四) —— 分析你App的性能之測量圖形性能(二)
25. INSTRUMENTS調(diào)試工具的使用(二十五) —— 分析你App的性能之監(jiān)視網(wǎng)絡(luò)和文件I / O(三)
26. INSTRUMENTS調(diào)試工具的使用(二十六) —— 分析你App的內(nèi)存使用之關(guān)于內(nèi)存分析(一)
27. INSTRUMENTS調(diào)試工具的使用(二十七) —— 分析你App的內(nèi)存使用之檢測內(nèi)存使用(二)
28. INSTRUMENTS調(diào)試工具的使用(二十八) —— 分析你App的內(nèi)存使用之找到廢棄的內(nèi)存(三)

Find Memory Leaks - 找到內(nèi)存泄露

Leaks分析模板使用Allocations and Leaks工具來測量應(yīng)用程序中的一般內(nèi)存使用情況,并檢查泄漏 - 已分配給不再被引用和可訪問的對象的內(nèi)存防楷。

注意:如果Instruments可以訪問關(guān)于您的應(yīng)用程序源代碼的信息牺丙,則會將泄漏報告為類名稱。 否則,將泄漏報告為內(nèi)存地址冲簿,例如Malloc大小粟判。 要確保Instruments可以訪問有關(guān)代碼的信息,請從Xcode啟動分析(請參閱Profile from Xcode)或配置符號映射文件(請參閱Map Data to Source Code)峦剔。

To look for memory leaks - 尋找內(nèi)存泄漏

  • 1)啟動儀器档礁。
  • 2)在出現(xiàn)的性能分析模板選擇對話框中,單擊Leaks吝沫。
  • 3)從目標(biāo)設(shè)備和進(jìn)程列表中選擇您的設(shè)備和應(yīng)用程序呻澜。
  • 4)點擊Choose創(chuàng)建一個跟蹤文檔。
  • 5)單擊工具欄中的錄制按鈕(或按下Command-R)開始錄制惨险。
  • 6)正常使用你的應(yīng)用程序
  • 7)觀察時間線窗格中的泄漏儀器是否有泄漏羹幸。泄漏顯示為紅色條。
  • 8)單擊時間線窗格中的“泄漏”工具以在詳細(xì)信息窗格中顯示與泄漏相關(guān)的信息辫愉。
  • 9)從詳細(xì)信息窗格的導(dǎo)航欄中的詳細(xì)類型列表中選擇調(diào)用樹栅受。顯示與任何檢測到的泄漏相關(guān)的方法調(diào)用列表。
  • 10)按Command-2顯示檢查器窗格的顯示設(shè)置區(qū)域一屋。
  • 11)在Call Tree顯示設(shè)置下窘疮,選擇Invert Call TreeHide System Libraries。最先顯示最近的方法調(diào)用冀墨。它還有助于縮小方法調(diào)用列表的范圍闸衫,使其適用于您的應(yīng)用。由您的應(yīng)用進(jìn)行的方法調(diào)用以黑色顯示诽嘉,并以用戶代碼圖標(biāo)開頭蔚出。
  • 12)在調(diào)用樹中,選擇要調(diào)查的方法調(diào)用虫腋。
  • 13)按下Command-3在檢查器的擴(kuò)展詳細(xì)信息區(qū)域中顯示所選方法調(diào)用的堆棧跟蹤骄酗。
  • 14)雙擊堆棧跟蹤中的方法調(diào)用以在儀器中顯示其代碼。
  • 15)單擊詳細(xì)信息窗格頂部的Xcode按鈕悦冀,以打開Xcode中的代碼進(jìn)行審閱和編輯趋翻。

To investigate a leaked object using a backtrace - 使用回溯來調(diào)查泄漏的對象

  • 1)單擊時間線窗格中的Leaks工具以在詳細(xì)信息窗格中顯示與泄漏相關(guān)的信息。
  • 2)從詳細(xì)信息窗格的導(dǎo)航欄中的詳細(xì)類型列表中選擇Leaks盒蟆。顯示通過回溯的泄漏對象列表踏烙。由Backtrace視圖泄漏的視圖按其分配點匯總所有泄漏塊,因為源代碼中的一個錯誤可能導(dǎo)致多次運行時泄漏历等,因為代碼會重復(fù)執(zhí)行讨惩。
  • 3)選擇一個你想調(diào)查的對象。
  • 4)單擊對象內(nèi)存地址旁邊的箭頭寒屯,以顯示對象在詳細(xì)信息窗格中的內(nèi)存歷史記錄以及相應(yīng)的引用計數(shù)和方法調(diào)用荐捻。
  • 5)按Command-3顯示檢查器擴(kuò)展詳細(xì)信息區(qū)域中所選對象的堆棧跟蹤。
  • 6)單擊擴(kuò)展詳細(xì)信息區(qū)域中的折疊Collapse按鈕以隱藏堆棧跟蹤中的系統(tǒng)調(diào)用。這可以更輕松地找到您的應(yīng)用程序的方法处面。
  • 7)雙擊堆棧跟蹤中的方法以在儀器中顯示其代碼厂置。
  • 8)單擊詳細(xì)信息窗格頂部的Xcode按鈕,以打開Xcode中的代碼進(jìn)行審閱和編輯魂角。

在您打開Xcode查看正在創(chuàng)建泄漏的代碼后农渊,泄漏的原因可能仍不清楚。 Leaks工具允許您通過使用細(xì)節(jié)窗格中的Cycles&Roots選項來查看正在創(chuàng)建泄漏的循環(huán)或颊。

To investigate a leaked object using cycles and roots - 使用cycles and roots來調(diào)查泄漏的對象

  • 1)單擊時間線窗格中的Leaks工具以在詳細(xì)信息窗格中顯示與泄漏相關(guān)的信息。
  • 2)從詳細(xì)信息窗格的導(dǎo)航欄中的詳細(xì)類型列表中選擇Cycles & Roots传于。顯示按周期泄漏的對象列表囱挑。
  • 3)選擇一個你想調(diào)查的對象。
  • 4)如果可用沼溜,請查看該對象的對象圖平挑。
  • 5)單擊對象旁邊的箭頭,以顯示詳細(xì)信息窗格中對象的內(nèi)存歷史記錄系草,以及相應(yīng)的引用計數(shù)和方法調(diào)用通熄。
  • 6)按Command-3顯示檢查器擴(kuò)展詳細(xì)信息區(qū)域中所選對象的堆棧跟蹤。
  • 7)單擊擴(kuò)展詳細(xì)信息區(qū)域中的折疊Collapse按鈕以隱藏堆棧跟蹤中的系統(tǒng)調(diào)用找都。這可以更輕松地找到您的應(yīng)用程序的方法唇辨。
  • 8)雙擊堆棧跟蹤中的方法以在儀器中顯示其代碼。
  • 9)單擊詳細(xì)信息窗格頂部的Xcode按鈕能耻,以打開Xcode中的代碼進(jìn)行審閱和編輯赏枚。

小點:對于使用自動引用計數(shù)(ARC)的應(yīng)用程序,泄漏對象的對象圖視圖有助于引用循環(huán)的診斷晓猛。通常饿幅,解決這些問題的方法是在weak關(guān)鍵字的對象圖中標(biāo)記向上引用。

To investigate a leak using the call tree - 使用調(diào)用樹調(diào)查泄漏

  • 1)單擊時間線窗格中的Leaks工具以在詳細(xì)信息窗格中顯示與泄漏相關(guān)的信息戒职。
  • 2)從詳細(xì)信息窗格的導(dǎo)航欄中的詳細(xì)類型列表中選擇調(diào)用樹栗恩。顯示與任何檢測到的泄漏相關(guān)的方法調(diào)用列表。
  • 3)按Command-2顯示檢查器窗格中的顯示設(shè)置區(qū)域洪燥。
  • 4)在Call Tree顯示設(shè)置下磕秤,選擇Invert Call TreeHide System Libraries。最先顯示最近的方法調(diào)用蚓曼。它還有助于縮小方法調(diào)用列表的范圍亲澡,使其適用于您的應(yīng)用。由您的應(yīng)用進(jìn)行的方法調(diào)用以黑色顯示纫版,并以用戶代碼圖標(biāo)開頭床绪。
  • 5)選擇您想調(diào)查的方法調(diào)用。
  • 6)按下Command-3在檢查器的擴(kuò)展詳細(xì)信息區(qū)域中顯示所選方法調(diào)用的堆棧跟蹤。
  • 7)雙擊堆棧跟蹤中的方法調(diào)用以在儀器中顯示其代碼癞己。
  • 8)單擊詳細(xì)信息窗格頂部的Xcode按鈕膀斋,以打開Xcode中的代碼進(jìn)行審閱和編輯。

雖然Instruments可以幫助您檢測內(nèi)存泄漏痹雅,但您仍需仔細(xì)查看相關(guān)的內(nèi)存歷史記錄和代碼仰担,以確定并解決問題。以下情況是泄漏的常見原因:

  • 當(dāng)對象不再被引用時绩社,Retain被對象調(diào)用摔蓝,而不調(diào)用相應(yīng)的release
  • 一個對象已被分配并使用不會導(dǎo)致對象自動釋放的API進(jìn)行初始化愉耙。
  • 如果泄漏的不是對象贮尉,那么您可能正在調(diào)用一個假定擁有malloc創(chuàng)建的內(nèi)存塊的API,并且您缺少對free()的相應(yīng)調(diào)用朴沿。

后記

本篇主要講述了找到內(nèi)存泄露猜谚,感興趣的給個贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赌渣,隨后出現(xiàn)的幾起案子魏铅,更是在濱河造成了極大的恐慌,老刑警劉巖坚芜,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件览芳,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸿竖,警方通過查閱死者的電腦和手機路操,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來千贯,“玉大人屯仗,你說我怎么就攤上這事∩η矗” “怎么了魁袜?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長敦第。 經(jīng)常有香客問我峰弹,道長,這世上最難降的妖魔是什么芜果? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任鞠呈,我火速辦了婚禮,結(jié)果婚禮上右钾,老公的妹妹穿的比我還像新娘蚁吝。我一直安慰自己旱爆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布窘茁。 她就那樣靜靜地躺著怀伦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪山林。 梳的紋絲不亂的頭發(fā)上房待,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音驼抹,去河邊找鬼桑孩。 笑死,一個胖子當(dāng)著我的面吹牛框冀,可吹牛的內(nèi)容都是我干的洼怔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼左驾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了极谊?” 一聲冷哼從身側(cè)響起诡右,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轻猖,沒想到半個月后帆吻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡咙边,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年猜煮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片败许。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡王带,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出市殷,到底是詐尸還是另有隱情愕撰,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布醋寝,位于F島的核電站搞挣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏音羞。R本人自食惡果不足惜囱桨,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗅绰。 院中可真熱鬧舍肠,春花似錦搀继、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啡专,卻和暖如春险毁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背们童。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工畔况, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慧库。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓跷跪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親齐板。 傳聞我的和親對象是個殘疾皇子吵瞻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容