使用widgetFromJsonFile释放的问题

_layout=static_cast<Layout*>(cocostudio::GUIReader::getInstance()->widgetFromJsonFile(jsonFile))
我用以上方法创建一个UI,在释放的时候,_layout->removeFromParent();
无法清楚掉内存

于是我尝试用
SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
TextureCache::getInstance()->removeUnusedTextures();

控制台显示:
cocos2d: cocos2d: SpriteFrameCache: removing unused frame: btn_quit_nor.png

cocos2d: cocos2d: SpriteFrameCache: removing unused frame: icon_chains_nor.png

cocos2d: cocos2d: SpriteFrameCache: removing unused frame: icon_base_nor.png

cocos2d: cocos2d: SpriteFrameCache: removing unused frame: btn_back_nor.png

cocos2d: cocos2d: SpriteFrameCache: removing unused frame: btn_restart_nor.png

cocos2d: cocos2d: TextureCache: removing unused texture: /var/mobile/Applications/AD5C62D0-8E53-4C5C-A33C-8F5C9980900A/HeroesDemo_05 iOS.app/UI/BattleScene/pauseLayer/zanting0.png

创建前内存:21.1M
添加UI:23.1M
移除后:21.1M
内存被成功释放了

我的问题是:
创建的时候通过该方法cocostudio::GUIReader::getInstance()->widgetFromJsonFile
为什么释放的时候 没有对应的remove方法了呢 (还是我没找到?)

UI添加之后引擎创建一些Texture并缓存起来。你移除Layout以后,只是会把这些Texture的引用计数减少到1,然后你调用
SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
TextureCache::getInstance()->removeUnusedTextures();
会把所有引用计数为1的spriteFrame和Texture释放掉,此时加载进来的纹理才会真正释放。

这并不是内存泄露,而是引擎的缓存机制决定 的。

谢谢解答:14: