版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.06.22 |
前言
我們在做app的時候,不是做完功能就結(jié)束了,很多時候是需要進行檢查和優(yōu)化的,而xcode自帶了一個很好的檢查工具,可以檢測內(nèi)存泄漏。還可以查看哪一個方法比較耗時。還可以檢測離屏渲染等等,隨后的幾篇我們就說一下這個工具的使用。感興趣的可以看這幾篇。
1.INSTRUMENTS調(diào)試工具的使用(一)
2.INSTRUMENTS調(diào)試工具的使用(二)
3.INSTRUMENTS調(diào)試工具的使用(三)
這一篇就先說一下查看數(shù)據(jù)的工具以及內(nèi)存分配。
八、查看數(shù)據(jù)工具
前面我們已經(jīng)說過,每個跟蹤文檔都包含了以下接口元素:
- 跟蹤面板(Track pane)
- 詳細面板(Detail pane)
- 擴展詳細面板(Extended Detail pane)
- 運行瀏覽器(Run Browser)
這里的每個控件顯示的都是你跟蹤文檔里面相同的數(shù)據(jù)。它們只是以不同的方式 顯示而已,關(guān)于每個數(shù)據(jù)點從高級的預覽到詳細的信息等。這樣可以讓你以不同的方 式來查看你的數(shù)據(jù)。你可以通過查看高級的數(shù)據(jù)來分析變化趨勢,然后查看詳細的數(shù) 據(jù)來確定在你的代碼中將要發(fā)生的事情和制定關(guān)于如何解決潛在問題的思路。
1. 跟蹤面板
跟蹤面板是跟蹤文檔窗口里面最突出的部分。跟蹤面板緊接于 instruments 面板 的右邊。該面板為每個 instrument 工具 供了收集數(shù)據(jù)的一個高級圖形視圖。你可以使用該面板來核查你從每個 instrument 工具收集到的數(shù)據(jù),并可以選擇你想進一 步研究的區(qū)域。
跟蹤面板中的自然圖形可以讓你更容易的發(fā)現(xiàn)你程序的趨勢和潛在的問題。比 如,圖形中一個內(nèi)存使用的尖峰信息意味著在該地方你的程序分配的內(nèi)存比平時更 多。該尖峰信息可能是正常的,也可能是意味你的代碼比你預計在此地方創(chuàng)建了更多 的對象或內(nèi)存緩沖區(qū)。一個 instrument 工具(例如 Spin Monitor instrument)也 同樣可以指出你程序反應遲鈍的地方。如果 Spin Monitor 的圖形相對是空白的,你 就知道你的程序是正常響應,但如果該圖形不空白,那么你可能需要核查為什么會出 現(xiàn)這樣的情況。
2. 詳細面板
??詳細面板一般在界面的下邊,通過它可以很好的跟蹤數(shù)據(jù)。可以通過下面方式打開詳細面板。
當詳細信息很多的時候,我們還可以搜索關(guān)鍵詞來找到想要的信息,如下圖所示。
3. 擴展詳細面板
??對于部分 instruments 工具,擴展詳細面板顯示了當前在詳細面板里面所選擇的 項目的額外信息。你可以執(zhí)行以下任一操作來打開和關(guān)閉擴展詳細面板。
- 通過菜單欄,如下圖所示。
- 通過下面的快捷鍵展開擴展面板,如下圖所示。
九、使用Allocations Instrument工具分析數(shù)據(jù)
??Allocations instrument 工具是一個跟蹤所有由應用程序分配的內(nèi)存的工具。所以你可以使用那些信息來識別在你應用程序里面的內(nèi)存分配模式,并識別你的應用程序內(nèi)存效率低下的地方。
??因為它跟蹤整個應用程序生命周期的內(nèi)存分配,你必須從 Instruments 應用里面 加載你的程序以便 Allocations instrument 工具可以收集它所需要的數(shù)據(jù)。在加載 的時候,Allocations instrument 使用系統(tǒng)中已有的掛鉤(hooks)來記錄與你應用程 序中分配和釋放事件相關(guān)的信息,無論這些事件起源于系統(tǒng)標準分配入口還是你自己 自定義的分配庫。隨著數(shù)據(jù)流的到來,instrument 更新并實時的向你顯示內(nèi)存是如 何被分配的。
??Allocations instrument 可以工作在使用標準分配函數(shù)(如 malloc,calloc 或 free)的應用程序,而且也也可以工作在使用垃圾回收(garbage collected)的應用 程序上面。后一種情況,收集器依然調(diào)用 free 來釋放 GC-aware(GC 感知)內(nèi)存。 Allocations instrument 同樣可以在構(gòu)建在分配內(nèi)存之上的例程里面工作,包括 Core Foundation 和 Cocoa 的內(nèi)存分配例程。
分析對象分配的數(shù)據(jù)
??Allocation instrument 工具的目的是為你顯示你的應用程序如何使用內(nèi)存。內(nèi)存是系統(tǒng)重要的資源,你應該明智的使用它。每個內(nèi)存分配都包含了直接成本和潛在 的長期成本。直接成本就是它分配內(nèi)存所消耗的時間,包括創(chuàng)建新的虛擬內(nèi)存頁面和 把它們映射到物理內(nèi)存上面。它也有可能包括把陳舊的內(nèi)存頁面寫入硬盤。而從長遠 來看,保持塊狀的物理內(nèi)存可能觸發(fā)系統(tǒng)額外的頁面,這和其他頁面操作一樣可能對 系統(tǒng)性能損耗很大。和所有工具一樣,Allocation 工具開始的地方也是跟蹤面板。默認配置下,跟蹤 面板圖形化你當前應用程序使用內(nèi)存數(shù)量的凈額。使用 instrument 的檢查器,你可 以修改視圖讓它顯示分配的密度,即內(nèi)存分配發(fā)生的地方,或你也可以讓它顯示堆棧的深度。分配密度圖可以讓你查看在你程序里面內(nèi)存分配發(fā)生的頻率。分配密度的尖峰意味著潛在的瓶頸,而你可以通過預先分配塊或減少對其他塊的依賴來減緩該情況。
跟蹤引用數(shù)的事件
??當你把 Allocations instrument 添加到你的文檔里面的時候,它的初始化配置是只記錄內(nèi)存的分配和釋放的事件。默認情況下,它不會記錄引用數(shù)的事件,比如 CFRetain 和 CFRelease 的調(diào)用。原因是記錄引用數(shù)的事件會給從進程里面收集數(shù)據(jù) 增加了額外的開銷,而且在大部情況是不需要的。然而如果你的代碼發(fā)生內(nèi)存泄露, 你可能想要配置 Allocations instrument 來記錄這些事件作為你努力追查泄露的一 部分。特別是,你可以查看任何不匹配的 retain 和 release 的事件來查看一個對象 是否最后引用被刪除了而它仍然保留著。
下面就是我的一個工程的內(nèi)存分配。
后記
未完,待續(xù)~~~