Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用

简介: <span style="font-size:14px;">Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动。启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存、CPU和文件系统。<br><br></span><div style="TEXT-ALIGN: center"><img alt=""
Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动。启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存、CPU和文件系统。



每个跟踪模板都有不同的用途,其中Leaks可以检测内存泄漏点,Allocations跟踪模板可以查看内存的使用情况。下面我们通过一个实例介绍一些Instruments工具的使用,我们来人为制造一个内存泄漏,我们在HelloWorldScene.cpp中修改代码:
bool HelloWorld::init()
{
	if ( !Layer::init() )
	{
		return false;
	}
    __String *s = new __String();


    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(堆)内存占用情况,因为堆内存需要人为释放,而栈内存不用人为管理。

事实上,内存泄漏是极其复杂的问题,工具使用是一方面,经验是另一方面。提高经验,然后借助于工具才是解决内存泄漏的根本。


更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
本书交流讨论网站: http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程: http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386


《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当:http://product.dangdang.com/23606265.html

互动出版网:http://product.china-pub.com/3770734

《Cocos2d-x实战 C++卷》源码及样章下载地址:

源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台
目录
相关文章
|
7月前
|
Android开发 iOS开发 开发者
轻松实现 UniApp Xcode 上传 IPA 无需 Mac,appuploder 一键上传助你高效开发!
轻松实现 UniApp Xcode 上传 IPA 无需 Mac,appuploder 一键上传助你高效开发!
|
7月前
|
IDE 开发工具 Swift
【Swift开发专栏】Swift的Xcode调试技巧
【4月更文挑战第30天】本文介绍了Swift开发者必备的Xcode调试技巧,分为三部分:调试界面概览、常用操作和高级技术。内容涵盖调试区域、断点管理、单步调试、变量查看及LLDB命令行调试。通过学习条件断点、异常断点、视图调试等高级技术,开发者能提升问题解决效率。熟悉这些工具将有助于优化开发流程并增强项目性能。
170 1
|
iOS开发 开发者 容器
最全XCode 开发证书配置(证书过期后的恢复)教程
最全XCode 开发证书配置(证书过期后的恢复)教程
|
iOS开发 开发者 容器
最全XCode 开发证书配置(证书过期后的恢复)教程
最全XCode 开发证书配置(证书过期后的恢复)教程
|
C++ iOS开发
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
888 0
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
|
API iOS开发
iOS 开发 - Xcode8下self.view.layer不能addSublayer,报错
iOS 开发 - Xcode8下self.view.layer不能addSublayer,报错
77 0
iOS 开发 - Xcode8下self.view.layer不能addSublayer,报错
|
iOS开发 开发者
iOS开发-新版Xcode在Appdelegate中通过代码控制跳转,不使用系统默认跳转到默认ViewController
iOS开发-新版Xcode在Appdelegate中通过代码控制跳转,不使用系统默认跳转到默认ViewController
275 0
iOS开发-新版Xcode在Appdelegate中通过代码控制跳转,不使用系统默认跳转到默认ViewController
iOS开发:Xcode自带的模拟器常用快捷键的使用
在iOS开发过程中,为了方便起见在测试程序的效果的时候,开发者会使用Xcode自带模拟器进行操作,而且Xcode自带的手机模拟器包含了苹果的所有最新的手机型号尺寸,这样也方便了开发者测试不同机型,但是在电脑Xcode上面的模拟器操作和真机操作还是有很大的不便,如果不知道常用的快捷键,操作起来也不方便,那么本篇博文就来分享一下Xcode自带模拟器的快捷键操作集合,分享给有需要的人。
606 0
iOS开发:Xcode自带的模拟器常用快捷键的使用
|
iOS开发 开发者
最全XCode 开发证书配置(证书过期后的恢复)教程
最全XCode 开发证书配置(证书过期后的恢复)教程
|
程序员 Android开发 iOS开发
iOS开发:Xcode报错“Could not insert new outlet connection:Could not find any...”问题的解决方法
在iOS开发过程中会遇到各种各样的问题,有些时候会遇到一些莫名其妙的报错问题,而且会觉得很无厘头,尤其是苹果的Xcode会出现各种不可抗拒的情况,网速不好会影响Xcode的正常使用,时间长不打开Xcode也会出现问题,一般这种情况下果断关闭Xcode再重新打就好了,那么本篇博文就来分享一下需要关闭Xcode再重新打开就好的情况,一般情况下在没有错误操作的时候还会出现这种错误就一定是Xcode的问题,那么接下来就来说说这种情况。
204 0