iOS Instrument Leaks

 Leaks

       Leaks 工具是一個跟蹤全部由應用程序分配的內存工具,能夠用來識別在應用程序裏面的內存分配模式,並識別應用程序內存效率低下的地方。這是爲了應用程序可以消除 內存泄露,進一步提升程序的可靠性,對於設計爲長時間運行的程序尤其正確。(最新版本autorelease不會被斷定爲內存泄露) app

       Leaks Trace Template 用來測試內存使用、檢查內存泄露、提供類的對象內存分配和泄露的內存的統計。它由Allocations和Leaks組成。 函數

用Leaks工具能夠發現App再也不有引用指向的內存。Leaks工具提供這些內存塊的報告。大部分這些內存泄露都是用類的名字來標識的,另外可能會用分配內存的大小標識。 工具

定位泄露的內存

  1. 打開Leaks Template。
  2. 從工具欄菜單中選擇你要進行檢測的app。
  3. 點擊Record按鈕。
  4. 執行你要檢查的代碼的操做,當有內存泄露的時候點擊Stop按鈕。
  5. 在Detail窗口中點擊被標記爲泄露的內存。
  6. 在Extended Detail 窗口,在代碼中雙擊選中其中的一條指令。
  7. 在Detai窗口中點擊Xcode圖標,能夠在Xcode中打開你要查看的代碼。


    注意:若是泄露的不是一個對象,那麼多是你的API調用的時候分配了一塊內存可是忘記了去釋放。 開發工具

    若是泄露的內存是一個Object-C對象,點擊選中的對象旁邊的箭頭,每一個單獨的地址將會顯示每一個對象retain/release的歷史記錄,對每個事件都有堆棧跟蹤。 測試

    引發非對象內存泄露的緣由是內存的分配和釋放沒有保持一致,所以只能顯示每一個事件的堆棧跟蹤。 spa

    跟蹤視圖的內存泄露集合了全部的內存泄露塊的位置——代碼中的一個錯誤可能致使重複執行的這段的代碼的調用產生多個運行時的內存泄露。 設計

    打 開Xcode查看每一個每個產生內存泄露的代碼時,內存泄露尚未被清除。Leaks工具的Detail窗口中的Cycles&Roots容許你 去查看調用循環。用ARC的時候Cycles&Roots視圖是很是重要的。它能夠用更高級的視圖方式顯示循環引用。一般的解決這些問題的關鍵是 就是把引用改成弱引用。 code

    查看循環引用內存泄露

    1. 選擇Leaks
    2. 在Detail面板中選擇Cycles&Roots視圖。
    3. 選擇內存泄露的循環引用表。


    注意:若是另外一部分代碼依然依賴這個消除的Bug或者這個Bug沒有修改正確,那麼你的App依然不穩定。 對象

有兩種方式能夠運行Allocations And Leaks(同Time Profiler打開方式類似)。

1、在Xcode中的Debug中打開(第一種方式)

1)運行程序後,進入Show the Debugger navigation(紅色線框區域)界面。

          選中Memory(藍色線框區域) 事件

        @1.Memory Use:            彩虹圈的8G是本機的內存,其中18.7M爲IOS Simulator所佔用的內存(這裏的佔用數據只能做爲參考,實際真機佔用內存可能會比這個數據要小)。

        @2.Usage Comparison : 這裏是本機內存的使用狀況,其實TestForApp爲IOS Simulator所佔內存。

         @3.Memory:

                                                   Duration:爲IOS Simulator 運行app的實際時間;

                                                   High:    使用內存最多時的內存數量;

                                                   Low:      使用內存最低時的內存數量;

 

2) 點擊右上角Profile in Instruments,進入Instruments界面。

 

         這裏會彈出一個對話框。

        @1Restart: (從新運行項目)

        @2Transfer:(將當前運行項目直接放入Instruments進行分析)

3) 點擊Restart,進入分析界面。點擊運行按鈕,運行 一段時間後,有以下界面。

 

           @1.Allocations:    分配的內存(被選中,區域3顯示即爲Allocations)

           @2.Leaks:         有內存泄露的內存

           @3.Details:        具體的分配和泄露內存的分析(選擇Call Tree選項能夠查看)

           @4.Settings:      詳細的設置(選擇Allocations 和 Leaks設置選項不一樣) ,如下爲Allocations的Settings

                                        Allocations Lifespan:    Allocations                          (全部分配的內存)

                                                                               Created & Persistent           (仍存在的) 

                                                                               Created & Destroyed           (銷燬的)

                                        Allocations Type:         All Heap & Anonymous  VM(堆內存和虛擬機上分配的內存)

                                                                               All Heap Allocations            (堆內存)

                                                                               All VM Regions                     (虛擬機上分配的內存)

4)右鍵點擊Leaks區域,選擇Call Tree 查看(Leaks 中紅色部分即爲內存泄露)

      

         雙擊main函數

 

              @1:紅色區域有內存泄露55.33KB

              @2:  綠色區域直接將arrString = nil; 項目沒有使用ARC,arrString alloc後沒有release,形成內存泄露。

5)修改項目後從新編譯,再次進入分析界面

 

            @1:  紅色區域修改代碼,從新編譯;

            @2:  成功運行App後再也不有內存泄露。

6)查看Allocations

 

         @1:選中Allocations

         @2:選中2中的Call Tree,查看分配的內存詳情。

         查看Allocations方式與查看Leaks的方式基本相同

7)退出保存

           @1:點擊退出鍵,若是有運行過的項目,則會彈出保存對話框;沒有運行過項目則直接退出

           @2 :  保存選項

 

2、從Instruments中打開Allocations and Leaks

1)打開Xcode開發工具

           @1: 打開Xcode->Open Develop Tool ->Instruments

2)顯示以下界面

          @1:下拉能夠選擇全部的Instruments。

3)下拉選擇Leaks

           @1: 雙擊Leaks,顯示以下界面

 

4)其他步驟跳參考: 1、3)

相關文章
相關標籤/搜索