HardBirch

【IOS】cocos2d-x 内存释放问题的解决过程

时间:12-05-11 栏目:iOS游戏开发技术 作者:张飞不张,文采横飞 评论:3 点击: 3,734 次

晚上帮同学看一个Cocos2d-x项目的内存释放问题,win32的版本运行没有问题,占用内存只有20多mb,但是在IOS平台上,没有切换几个场景就crash掉了。

编译期间发现了几个问题这里记录一下:

(1)在win32 下,CCLayer中 init()如果忘了添加返回值return true,是不会有问题的,但是在IOS版本上,同样的代码在xcode中虽然编译会通过,但是在运行的时候,CCNode是无法addChild的,所以请各位习惯不好的童鞋注意了~~

(2)cocos2d-x 在 1.0.1-x-0.12.0 的版本中  touches->locationInView()需要参数,而 1.0.1-x-0.13.0 
beta 的版本中不需要则不需要。 所以两个平台cocos2d-x的版本一定要统一。

 

好了,编译通过,下面来说一下是怎么解决内存释放的问题的 

先向大家介绍一个工具:Xcode自带Instruments,通过它可以看到应用程序占用的实时内存和cpu信息(当然它的功能不止这些~~~)。具体怎么使用,后面的文章我会详细介绍一下的。

第一次查看

(1)连接真机,将应用程序编译到真机上。

(2)从 Instruments 中启动应用程序

(3)发现程序启动的时候,只占用了8Mb 左右的内存,然后点击切换场景

(4)切换场景中内存占用了30Mb,切换完成后内存依旧是30Mb

(5)继续切换,内存占用量不断增加,全部场景没有切换完,程序crash

 

初步分析,切换场景以后内存没有释放,开始检查代码:

(1) 检查 调用了 retain()方法的对象,看看有没有在OnExit()中没有调用release()的 【全部都加了release,不是这个问题】

(2) 在 onExit() 方法中手动调用 CCDirector::shareDirector->purgeDatacache()清理Cache 【内存占用量,稍有降低,但绝不是问题的根源】

(3) 检查了 CClayer 的创建方式,确认了 调用 autorelease() 都是用的   CClayer::node();方法内自动调用了 autorelease(),如果是
通过类似new  CCLayer的话,需要手动调用 autorelease()
【好吧,也不是这个问题】

(4) 没办法,继续检查 OnExit()函数     【对,就是它,就是它,就是它.....】

5) 终于找到问题的原因了,在onExit()的时候,没有调用 父类的 OnExit(), CCLayer::OnExit();只是添加了retain对象的release的话,是不会把当前Layer的内存释放掉的。 【Fix
it!!!!!!】

(6)  Command+R内存始终20Mb 。【完事走人。。。】

 

明天测试Android版本。。估计问题更多·····


今天测试的时候,又发现一个问题,在ipad 2 上面如果使用了 CCMove 来移动 CCSprite,会发生很严重的闪屏情况,查了一些资料,原来官网上早就有人报告了。。http://www.cocos2d-x.org/boards/6/topics/6802

解决的办法也有了。

只需要在  AppDelegate里面加上

CCDirector::sharedDirector()->setDepthTest(false);


或者是

CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);

 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: 【IOS】cocos2d-x 内存释放问题的解决过程

【IOS】cocos2d-x 内存释放问题的解决过程:目前有3 条留言

  1. 地板
    http1987:

    不错,支持

    2012-05-11 08:46 [回复]
  2. 板凳
    fo0ol:

    学习,学习

    2012-05-11 23:44 [回复]
  3. 沙发
    guchengluoye:

    不错不错,楼主真够细心的啊

    2012-05-31 17:24 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐