cocos2d-x 内存管理的问题

希望有大牛说下在使用cocos2d-x 引擎做开发时内存该如何正确的管理?内存什么时候必须释放?什么时候不必释放?释放时该用什么方法?比如说,我在场景里增加了一个layer,layer里有各种对象,当我想清掉layer所占的内存时这样写:
this->removeChild(layer,true);
layer=NULL;
这样操作了之后layer所占的内存是否已经被释放干净?本人是新手,可能问的问题很白,希望大侠们能够不吝赐教。非常感谢!!

可以交给放入autorelease池让引擎去管理,在实例化的时候加上layer->autorelease()
也可以C++手动的去释放。

不一定,cocos2d里面采用引用计数来管理内存,当引用计数减少为0的时候便释放内存

游戏里面每画一帧,CCPoolManager就会检查池中是否有加入进来的aotorelease的对象,如果有就会release(引用计数减1),release之后该对象的一个属性就会置为false,也就是说游戏画下一帧的时候对该对象就不会再调用执行release操作,CCPoolManager的实际效果就应该是将引用计数减一,在实际的游戏里面,一般带有addXXX语义的操作都会将引用计数+1而带有removeXXX语义的操作都会将引用计数-1,当然初始化的时候引用计数肯定是要+1的,游戏里面一般情况下采用静态方法创建的对象都是加入到了CCPoolManager里面来管理的,而我们手动release和CCPoolManager的差别就是调用时机不一样吧,使用Smart Pointer我觉得开销相对来说大很多吧

— Begin quote from ____

老G 发表于 2012-4-20 13:58 url

关于cocos2d-x内存管理,写的简单又清晰的可以看这个
http://blog.csdn.net/czh0766/article/details/6878

— End quote

请问如果我在场景层里加载一个layer,layer里边有好多对象,现在我需要频繁的刷新这个layer,也就是重新构造这个layer,现在造成了程序崩溃或主线程堵塞了,我猜测是我没有把layer占用的内存释放掉,我是这样写的:
void Menu::initLayer(){
if(layer!=NULL){
this->removeChild(layer,true);
layer = NULL;
}
layer = CCLayer::node();

this->addChild(layer,0);
}
我每次刷新都是重新调用这个方法initLayer(),请问我这样做是不是不行啊?layer所占的内存是不是没有释放掉?求解答~~~感激涕零啊…

— Begin quote from ____

老G 发表于 2012-4-20 19:28 url

为什么要这样写呢?这代码看起来很古怪。

这样吧,你设一个tag,然后在CCLayer的析构里打一个断点。然后 …

— End quote

事实证明,内存没有被释放,一直在累加,知道程序崩溃为止…求助老G我该如何做?有关内存释放的相关资料我也都看了,但我还是不知道我现在的内存该如何释放?老G给点提示吧~跪求指教~~~~~

— Begin quote from ____

老G 发表于 2012-4-20 19:28 url

为什么要这样写呢?这代码看起来很古怪。

这样吧,你设一个tag,然后在CCLayer的析构里打一个断点。然后 …

— End quote

事实证明,内存没有被释放,而且一直在累加,能不能告诉我我该怎么办?我removeChild了,我也强制delete了,结果还是不行…求助啊。。。。