把ui编辑器制作的面板销毁后,已经执行了TouchGroup的析构函数,它所用的png还在缓存里,执行CCTextureCache::removeUnusedTextures()也没用
另外动画编辑器也是这样的问题
你好,请问您是如何检测的呢?纹理通常会延迟释放。
在切换地图的时候,执行CCTextureCache::removeUnusedTextures(),会打印目前缓存里的纹理,以及本次移除掉的纹理,发现之前打开的面板所用的纹理还在缓存里
replaceScene()么?
不是,只是销毁了地图layer,scene没变
我发现要这么干才可以:
CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
原因是CCSpriteFrameCache持有了Texture的引用计数,只用removeUnusedTextures是无法清除纹理的
但是这样会引起另外一个问题:
使用CCArmatureDataManager管理的动作并不会持有spriteframe的引用计数。但是它仍然缓存了加载的armature
这样在创建armature的时候会直接使用缓存的armature动作,而不会重新加载spriteframe, 导致无法显示动作
我也有这个问题,你解决了吗?
请问这个问题怎么解决?~~~救命啊啊啊啊啊,现在我也是发现有很多UI加载的png没释放的,过了很久也一直存在缓存里,用cc.Director:getInstance():purgeCachedData()可以看到还有那些图片在缓存里没释放
被引用到的图片是purge不了的。
具体被谁引用就看自己了