ui控件的效率问题

引擎版本:cocos2d-x 2.2.2

使用中发现,Widget的initRenderer()方法,会生成一些空的sprite,如:
void Button::initRenderer()
{
_buttonNormalRenderer = CCSprite::create();
_buttonClickedRenderer = CCSprite::create();
_buttonDisableRenderer = CCSprite::create();
_titleRenderer = CCLabelTTF::create();

CCNodeRGBA::addChild(_buttonNormalRenderer, NORMAL_RENDERER_Z, -1);
CCNodeRGBA::addChild(_buttonClickedRenderer,PRESSED_RENDERER_Z, -1);
CCNodeRGBA::addChild(_buttonDisableRenderer,DISABLED_RENDERER_Z, -1);
CCNodeRGBA::addChild(_titleRenderer,TITLE_RENDERER_Z, -1);
}

这里会调用:
CCSprite* CCSprite::create()
{
CCSprite *pSprite = new CCSprite();
if (pSprite && pSprite->init())
{
pSprite->autorelease();
return pSprite;
}
CC_SAFE_DELETE(pSprite);
return NULL;
}

如果texture为NULL,会使用cc_2x2_white_image,在void CCSprite::setTexture(CCTexture2D *texture)中,
if (NULL == texture)
{
// Gets the texture by key firstly.
texture = CCTextureCache::sharedTextureCache()->textureForKey(CC_2x2_WHITE_IMAGE_KEY);

// If texture wasn’t in cache, create it from RAW data.
if (NULL == texture)
{
CCImage* image = new CCImage();
bool isOK = image->initWithImageData(cc_2x2_white_image, sizeof(cc_2x2_white_image), CCImage::kFmtRawData, 2, 2, 8);
CCAssert(isOK, “The 2x2 empty texture was created unsuccessfully.”);

texture = CCTextureCache::sharedTextureCache()->addUIImage(image, CC_2x2_WHITE_IMAGE_KEY);
CC_SAFE_RELEASE(image);
}
}

接下来:
CCTexture2D* CCTextureCache::textureForKey(const char* key)
{
return (CCTexture2D*)m_pTextures->objectForKey(CCFileUtils::sharedFileUtils()->fullPathForFilename(key));
}

CC_2x2_WHITE_IMAGE_KEY是一个不存在的文件,这里会耗费大量的时间。

感谢您的反馈,这个问题我已经提交给开发人员验证,如果有可以优化的地方,我们会及时优化。