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