iOS Instruments內存檢測使用


Instruments 可以幫我們了解到應用程序使用內存的幾個方面:

  • 全局內存使用情況(Overall Memory Use): 從全局的角度監測應用程序的內存使用情況,捕捉非預期的或大幅度的內存增長。
  • 內存泄露(Leaked memory): 未被你的程序引用,同時也不能被使用或釋放的內存。
  • 廢棄內存(Abandoned memory): 被你的程序引用,但是沒什么卵用的內存。
  • 僵屍對象(Zombies): 僵屍對象指的是對應的內存已經被釋放並且不再會使用到,但是你的程序卻在某處依然有指向它的引用。在 iOS 中有一個 NSZombie 機制,這個是為了內存調試的目的而設計的一種機制。在這個機制下,當你 NSZombieEnabled 為 YES 時,當一個對應的引用計數減為 0 時,這個對象不會被釋放,當這個對象再收到任何消息時,它會記錄一條 warning,而不是直接崩潰,以方便我們進行程序調試。

這里我們介紹下查找內存泄露的過程:

1、同「CPU 占用性能測試」一樣,先在 Xcode 中對當前的項目執行 Profile (Command-I),並在打開的對話框中選擇 Leaks 這個模板:

 

2、進入 Instruments 后,選擇正確的設備和應用程序。

3、點擊紅色按鈕運行應用程序,我們可以看到如下界面:

 

4、在 Display Settings 中勾選 Invert Call TreeHide System Libraries 或其他選項可以過濾顯示的數據。

 

5、在導航欄的篩選框中,我們可以輸入關鍵字來篩選數據。

 

 

image

6、在實際使用中,我們進入一個頁面后再退出,發現相關的內存分配沒有清空,這時候就發生內存泄露了。我們查看更細節的調用信息,追蹤到可能造成內存泄露的代碼位置:

image

 

7、我們還可以使用 Activity MonitorAllocationsZombies 等模板來針對性地做內存監測。

在開發中我一般是使用Xcode自帶的instrument工具就夠用了,它的快捷鍵是(commend+i),是自帶的一個可以用來分析應用程序的性能,
     有三個功能在開發中經常用到,
1、Leaks就可以檢測內存泄漏,利用它可以看到全局的一個內存使用情況,也可以查看是否存在內存泄漏,是否存在野指針;
2、是可以使用 Core Animation + Time Profiler 來評估圖形性能,可以很直觀的看到界面的性能是否良好。
3、Time Profiler在應用程序開始運行后.我們可以看到不同的線程以及方法調用占用的時間,從而可以評估出 CPU 性能的瓶頸和找到優化方向。
但在使用Xcode這個工具的時候有2個注意點:
 1.需要使用真機。因為手機的CPU,GPU和模擬器是有區別的,mac的Cpu是比手機快的,而模擬器要用CPU來模擬手機的GPU,這點模擬器是比不上手機的。
2.應用程序運行一定要發布配置 而不是調試配置.,因為打包的時候,編譯器會自動進行優化,比如去除調試符號或者移除並重新組織代碼,還會引入"Watch Dog"[看門狗]機制,不同的場景下,“看門狗”會監測應用的性能,但在xcode的配置設置下,watch Dog會被禁用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM