关于onExit()和析构函数~ 新手求解

是这样的…(在VS下)…
我在一个scene上添加了一个layer, 当切换场景的时候, 发现当加载完下一个场景之后,程序直接调用了scene的onExit()函数和析构函数,接着调用layer的析构函数。我本以为会在scene的onExit()方法之前调用layer的onExit(),但是这个阶段并没有调用layer的onExit()函数。

我知道layer::node()得到的是一个autorelease对象,要在scene析构函数之后自动release,但是没调用它的onExit()函数。这表示我们要在它的析构函数里面去release资源。

是不是一个autorelease对象只能在析构函数里面release它的资源,而不能放在onExit()函数里面? 那什么情况下既可以放在onExit()函数和析构函数里面?或者只能放在onExit()函数里面?

我在网上也没找到很好的解答, 求大神指导, 或者有没有很好的博文给个链接。新手刚开始接触cocos2d-x不久,如果上述有错误,请指出, 求指导,求交流, 非常感谢!

— Begin quote from ____

skoky 发表于 2012-8-11 00:00 url

调用顺序是 CCScene:nExit -> CCLayer:nExit

在调用scene的onexit方法的时候 会递过调用子节点的onE …

— End quote

非常感谢…

这次认真看了下log发现真的是递归调用了子节点的onExit方法:

void GameOverScene::onExit()
void GameOverLayer::onExit()
GameOverScene::~GameOverScene(void)
GameOverLayer::~GameOverLayer(void)

上次不知道为什么没看到,可能是看错了。

那就是说释放资源在onExit和析构方法里都可以吧?

看来要人工一次…

— Begin quote from ____

CoCo漫游 发表于 2012-8-11 16:28 url

非常感谢…

这次认真看了下log发现真的是递归调用了子节点的onExit方法:

— End quote

看你的需求,你需要在离开场景就释放资源就在onExit里面去释放不然就在析构函数里面释放。

默认是在onExit里面暂停逻辑,在析构函数里面去释放。

— Begin quote from ____

skoky 发表于 2012-8-13 10:05 url

看你的需求,你需要在离开场景就释放资源就在onExit里面去释放不然就在析构函数里面释放。

默认是在onEx …

— End quote

谢谢…学习了…

调用顺序是 CCScene::onExit -> CCLayer::onExit

在调用scene的onexit方法的时候 会递过调用子节点的onExit。