Cocos開發中性能優化工具介紹之Xcode中Instruments工具使用

Instruments是動態分析工具,它與Xcode集成在一塊兒,能夠在Xcode中經過菜單Product→Profile啓動。啓動如圖所示,Instruments有不少跟蹤模板能夠動態分析和跟蹤內存、CPU和文件系統。

html



每一個跟蹤模板都有不一樣的用途,其中Leaks能夠檢測內存泄漏點,Allocations跟蹤模板能夠查看內存的使用狀況。下面咱們經過一個實例介紹一些Instruments工具的使用,咱們來人爲製造一個內存泄漏,咱們在HelloWorldScene.cpp中修改代碼:
微信

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片框架

  1. bool HelloWorld::init()  函數

  2. {  工具

  3.     if ( !Layer::init() )  網站

  4.     {  spa

  5.         return false;  .net

  6.     }  code

  7.     __String *s = new __String();  orm

  8.   

  9.   

  10.     log("%s",s->getCString());  

  11.   

  12.   

  13. … …  

  14.   

  15.   

  16.     return true;  

  17. }  



咱們在代碼中添加了__String *s = new __String()語句,使用new關鍵字分配內存,然而直到init函數結束咱們都沒有使用delete s語句釋放它。這樣的語句會致使內存泄漏。
首先啓動Instruments工具,在圖對話框中選擇Leaks跟蹤模板,點擊按鈕Profile進入如圖所示界面。


在Instruments中,雖然選擇了Leaks模板,但默認狀況下也會添加Allocations模板。基本上凡是分析內存都會使用Allocations模板,它能夠監控內存分佈狀況。選中Allocations模板(圖中①區域),右邊的③區域會顯示隨着時間的變化內存使用的折線圖,同時在④區域會顯示內存使用的詳細信息,以及對象分配狀況。點擊Leaks模板(圖中②區域),能夠查看內存泄漏狀況,如圖20-3所示,若是在③區域有紅線出現,則有內存泄漏,④區域則會顯示泄漏的對象。


點擊上圖中出現的泄漏點(紅線)在④區域打開詳細界面,以下圖所示,能夠發現一個cocos2d::__String對象,能夠看到它的內存地址、佔用字節、所屬框架和所屬函數等信息。



點擊工具欄View中的按鈕,打開擴展詳細視圖,如圖20-5所示,能夠看到右邊的跟蹤堆棧信息,其中圖標所示的條目是咱們本身應用的代碼,雙擊HelloWorld::init()可進入程序代碼,如圖所示。





圖所示的第33行代碼就是泄漏點程序代碼了,咱們從中不難發現問題。
若是咱們想進一步評估它對於內存的佔用狀況,能夠看看Allocations模板的折線圖。從圖中看到,各類變量的使用內存佔用狀況,也能夠知道某個時刻的內存佔用狀況。4號區域是Heap(堆)內存佔用狀況,由於堆內存須要人爲釋放,而棧內存不用人爲管理。


事實上,內存泄漏是極其複雜的問題,工具使用是一方面,經驗是另外一方面。提升經驗,而後藉助於工具纔是解決內存泄漏的根本。


更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》

本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com

歡迎加入Cocos2d-x技術討論羣:257760386

歡迎關注智捷iOS課堂微信公共平臺

相關文章
相關標籤/搜索