版本記錄
版本號 | 時間 |
---|---|
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(三)
About Memory Analysis - 關(guān)于內(nèi)存分析
每當(dāng)你的應(yīng)用程序創(chuàng)建對象時濒募,都會為它們分配內(nèi)存接剩。傳統(tǒng)上,應(yīng)用程序的工作是跟蹤這些對象并在不再需要時釋放它們萨咳,以便為其他對象重新分配內(nèi)存懊缺。自動引用計數(shù)(ARC)功能可以讓系統(tǒng)負(fù)責(zé)內(nèi)存管理,從而使事情更輕松培他。啟用ARC后鹃两,系統(tǒng)會處理監(jiān)視對象分配并在適當(dāng)?shù)臅r候釋放它們,從而使您的應(yīng)用程序無需執(zhí)行任何操作舀凛。不管內(nèi)存如何管理俊扳,但即使是最好的應(yīng)用程序設(shè)計也會偶爾遇到難以隔離的內(nèi)存問題。
Instruments可以幫助您繪制應(yīng)用程序如何使用內(nèi)存的圖片猛遍,從而更容易識別潛在的問題區(qū)域馋记。它甚至可以自動檢測某些類型的內(nèi)存問題并將它們標(biāo)記為供您分析号坡。使用儀器來觀察和追蹤以下內(nèi)容:
Overall Memory Use - 整體內(nèi)存使用。高級別監(jiān)控應(yīng)用程序如何使用內(nèi)存梯醒,并將其與系統(tǒng)上其他活動進(jìn)程的內(nèi)存使用情況進(jìn)行比較宽堆。尋找大量或意想不到的內(nèi)存增長區(qū)域。請參閱Monitor Memory Usage茸习。
Leaked Memory - 泄漏的內(nèi)存畜隶。這是在某些時候分配的內(nèi)存,但從未發(fā)布号胚,不再被您的應(yīng)用程序引用籽慢。由于沒有對它的引用,現(xiàn)在無法釋放它猫胁,并且內(nèi)存不能再次使用箱亿。例如,假設(shè)您已經(jīng)編寫了一個在圖形中創(chuàng)建矩形對象的應(yīng)用程序弃秆,但在結(jié)束繪制時從未釋放對象极景。在這種情況下,只要包含矩形的繪制關(guān)閉驾茴,您的應(yīng)用程序就會泄漏越來越多的內(nèi)存。要解決泄漏問題氢卡,您需要確定哪些對象未被釋放锈至,然后更新您的應(yīng)用程序以在適當(dāng)?shù)臅r間釋放它。請參閱查找Find Memory Leaks译秦。
Abandoned Memory - 被廢棄的內(nèi)存峡捡。這是你的應(yīng)用程序由于某種原因分配的內(nèi)存,但它不是必需的筑悴,不會被引用们拙。例如,假設(shè)您的應(yīng)用程序在緩存完成后將圖像添加到緩存中 - 對同一圖像使用兩倍的內(nèi)存阁吝⊙馄牛或者,也許你的應(yīng)用程序維護(hù)一個對象數(shù)組突勇,以備日后需要訪問它們装盯,但你從來沒有真正做過。與泄漏的內(nèi)存不同甲馋,像這樣廢棄的內(nèi)存仍然在您的應(yīng)用中引用埂奈。它只是沒有用處。由于它在技術(shù)上仍然有效定躏,因此Instruments識別出來更加困難账磺,需要更多的偵探工作芹敌。請參閱Find Abandoned Memory。
Zombies - 僵尸垮抗。這是已經(jīng)釋放并且不再需要的內(nèi)存氏捞,但是你的代碼仍然在某處引用它。例如借宵,假設(shè)您的應(yīng)用程序包含圖像緩存幌衣。緩存清除后,您的應(yīng)用程序不應(yīng)嘗試引用之前包含的圖像壤玫。調(diào)用這些不存在的圖像被認(rèn)為是僵尸 - 對不再存在的對象的引用豁护。請參閱Find Zombies。
由于內(nèi)存問題難以找到欲间,因此在不同階段定期拍攝應(yīng)用程序快照會很有幫助楚里,以便查找意外或不受限制的內(nèi)存增長。您可以比較快照以確定如何分配和銷毀對象猎贴,以及隨著時間的推移如何使用內(nèi)存班缎。
通過持續(xù)執(zhí)行一組可重復(fù)的用戶操作來測試您的應(yīng)用程序也很重要,這些操作會導(dǎo)致您的應(yīng)用程序進(jìn)入新狀態(tài)并在完成后返回其原始狀態(tài)她渴。這種類型的研究被稱為generational analysis
达址。每次您的應(yīng)用程序進(jìn)入新狀態(tài)時,都會創(chuàng)建一代“對象”趁耗。在大多數(shù)情況下沉唠,當(dāng)應(yīng)用程序返回到原始狀態(tài)時,您應(yīng)該期望這些對象被釋放苛败。例如满葛,如果你的應(yīng)用程序打開一個窗口,那么當(dāng)窗口關(guān)閉時罢屈,任何窗口對象都應(yīng)該被釋放嘀韧。如果他們不是,那么你可能有內(nèi)存問題缠捌。執(zhí)行代分析時锄贷,由于緩存和其他初始化過程,初始代可能會顯示比預(yù)期更大的內(nèi)存使用量曼月。因此肃叶,請多次重復(fù)用戶操作,以獲得對應(yīng)用行為的真實感受十嘿。
注意:有關(guān)管理內(nèi)存的深入信息因惭,請參閱Advanced Memory Management Programming Guide。
后記
本篇主要講述了關(guān)于內(nèi)存分析绩衷,感興趣的給個贊或者關(guān)注~~~~