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 Tree
和 Hide System Libraries
或其他選項可以過濾顯示的數據。
5、在導航欄的篩選框中,我們可以輸入關鍵字來篩選數據。
6、在實際使用中,我們進入一個頁面后再退出,發現相關的內存分配沒有清空,這時候就發生內存泄露了。我們查看更細節的調用信息,追蹤到可能造成內存泄露的代碼位置:
7、我們還可以使用
Activity Monitor
、Allocations
、Zombies
等模板來針對性地做內存監測。
在開發中我一般是使用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會被禁用。