内存疑问!求高手解答下

用CocosStudio UI编辑器做了一个类似于背包的界面,背包上可以看不同类型的东西,而且东西在滚动层上显示,当然东西都是在同一滚动层上显示的
好了,现在问题来了,每次切换后内存就往上涨!求各位大大帮忙看看,该怎么释放内存!
ScrollView* LayerScrollView = dynamic_cast<ScrollView*>(Helper::seekWidgetByName((Widget )layer->getChildByTag(0), fileName)); 获得编辑器上的滚动层
Button
PetButton = Button::create(); 创建滚动层上的按钮
PetButton->loadTextureNormal(“pet_0000_pet_frame.png”, Widget::TextureResType::PLIST);
PetButton->setTag(PET_BUTTON_TAG + i);
PetButton->setTouchEnabled(true);
PetButton->addTouchEventListener(this, toucheventselector(PetLayer::btnTouchedCallback_Pets));
RelativeLayoutParameter* text = RelativeLayoutParameter::create();
text->setMargin(Margin(_x,_y,0,0));
PetButton->setLayoutParameter(text);
LayerScrollView ->addChild(PetButton);

ImageView* iconimage = ImageView::create(); 创建滚动层上的图片
iconimage->loadTexture(“pet_01.png”, Widget::TextureResType::PLIST);
iconimage->setTag(PET_ICON_TAG + i);
RelativeLayoutParameter* text_1 = RelativeLayoutParameter::create();
text_1->setMargin(Margin(_x + 18,_y + 16,0,0));
iconimage->setLayoutParameter(text_1);
iconimage->setTouchEnabled(false);
LayerScrollView ->addChild(iconimage);

Text* Levellabel = Text::create(); 创建滚动层上的文本
Levellabel->setFontSize(20);
Levellabel->setString(“aaa”);
Levellabel->setTag(PET_LEVEL_TAG + i);
RelativeLayoutParameter* text_4 = RelativeLayoutParameter::create();
text_4->setMargin(Margin(_x + 20,_y + 70,0,0));
Levellabel->setLayoutParameter(text_4);
Levellabel->setTouchEnabled(false);
LayerScrollView ->addChild(Levellabel);

每次切换之前先用 LayerScrollView->removeAllChildrenWithCleanup(true);移除滚动层上面的控件

求各位大大帮忙解决下!!!

首先,UI控件的内存会增长是因为cocos2d-x引擎的缓存机制决定的,即使你把scrollView从当前场景移除,与之相关的纹理还是会被缓存在TextureCache里面。
但是,如果你的场景内容不变,应该不会出现一直增长。

还有,切换之前应该也不用调用LayerScrollView->removeAllChildrenWithCleanup(true);,场景都切换了,scrollView自然也就被释放了。
它上面的按钮也会被释放掉。

不好意思,可能我没表达清楚
Scene和Layer是没有变化的,我在A场景上创建了B层,然后在B层上添加编辑器内的内容,只不过点击上面不同按钮显示不同东西罢了。
这些东西像代码那样手动添加到滚动层上,但是就是每次切换之后内存会往上涨

你可以在切换的时候调用
TextureCache::getInstance()->removeUnusedTextures();
SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();