Instruments是动态分析工具,它与Xcode集成在一块儿,能够在Xcode中经过菜单Product→Profile启动。启动如图所示,Instruments有不少跟踪模板能够动态分析和跟踪内存、CPU和文件系统。
html
每一个跟踪模板都有不一样的用途,其中Leaks能够检测内存泄漏点,Allocations跟踪模板能够查看内存的使用状况。下面咱们经过一个实例介绍一些Instruments工具的使用,咱们来人为制造一个内存泄漏,咱们在HelloWorldScene.cpp中修改代码:
微信
[html] view plaincopy框架
bool HelloWorld::init() 函数
{ 工具
if ( !Layer::init() ) 网站
{ spa
return false; .net
} code
__String *s = new __String(); orm
log("%s",s->getCString());
… …
return true;
}
咱们在代码中添加了__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课堂微信公共平台