我想在切换场景时清一下纹理缓存。
开始想写:
replaceScene();
removeUnusedTextures();
不过感觉不对,因为replaceScene调用后场景不会马上释放,所以之后调用removeUnusedTextures也白搭。
到底如何实现切换场景时清纹理缓存呢?
我想在切换场景时清一下纹理缓存。
开始想写:
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文件加载进来的节点