如何实现切换场景时清纹理缓存

我想在切换场景时清一下纹理缓存。

开始想写:

replaceScene();
removeUnusedTextures();

不过感觉不对,因为replaceScene调用后场景不会马上释放,所以之后调用removeUnusedTextures也白搭。

到底如何实现切换场景时清纹理缓存呢?

旧场景的析构函数里调用

新场景加载完enter时清理

旧场景的析构函数里调用

— Begin quote from ____

引用第1楼insul于2014-02-13 10:38发表的 :
旧场景的析构函数里调用 http://www.cocoachina.com/bbs/job.php?action=topost&tid=184110&pid=887073

— End quote

在场景的析构函数里清好像不行吧。
因为析构的时候是先析构子类再析构基类(CCNode)。
在子类析构中调removeUnusedTextures,它会先执行。然后才是执行基类(CCNode)析构释场景树。
于是相当于还是把removeUnusedTextures放在场景析构之前了,所以仍然是不起作用啊。

在旧场景的onExit方法里调用

— Begin quote from ____

引用第5楼ginewar于2014-02-13 20:44发表的 :
在旧场景的onExit方法里调用 http://www.cocoachina.com/bbs/job.php?action=topost&tid=184110&pid=887443

— End quote

onExit执行得比析构函数还早啊,在析构函数中调都不行,在onExit中应该更不行吧。

我们都是在新场景的onEnter里面调用的

— Begin quote from ____

引用第7楼hujian于2014-02-18 20:04发表的 :
我们都是在新场景的onEnter里面调用的 http://www.cocoachina.com/bbs/job.php?action=topost&tid=184110&pid=889598

— End quote

新场景onEnter时旧场景还没有释放,这样更不行吧。

场景切换后,只有scene的引用计数重置为1,其子节点的引用计数依然在,到时removeUnusedTextures不起作用,就像在移除一个层的时候,发现其子节点的引用计数依然是大于1的,所以移除缓存图片的时候,不起作用。
所以在removeChild的时候,我有手动加了一个释放的方法。遍历其所有的子节点,对子节点调用removeAllChildren,把引用计数全部清了,再调用removeUnusedTextures的方法

具体怎么写的呢?,我遍历后removeAllChildren ,缓存中引用计数还不为1,我的是csb studio文件加载进来的节点