今天发现另外一个问题,
Android平台, Cocos2d-x V 2.2.1 + 论坛发布的rapidjson补丁,
在内存中生成一个CCImage并通过CCTextureCache::sharedTextureCache()->addUIImage将其加到CCTextureCache中,然后通过UIImageView使用它, 如果只使用一次, 则在切换Scene时(估计此时调用了CCTextureCache::shareTextureCache()->removeUnusedTextures),日志不报错, 如果使用两次或以上, 则在切换Scene时在CCOBject::release 中报 “reference count should greater than 0"; 但是如果在CCTextureCache::sharedTextureCache()->addUIImage之后调用texture的retain, 则切换Scene时没有看到释放该Texeture的日志, 不知道此Textute有没有释放。代码如下:
ccColor4B place_holder_color_b = ccc4( 255, 255, 255, 0 );
ccColor4F place_holder_color_f = ccc4FFromccc4B( place_holder_color_b );
CCSize place_holder_size = pLabel->getSize();
CCRenderTexture *pRenderTarget;
pRenderTarget = CCRenderTexture::create(place_holder_size.width, place_holder_size.height, kCCTexture2DPixelFormat_RGBA8888);
pRenderTarget->setPosition(ccp(place_holder_size.width / 2, place_holder_size.height / 2));
pRenderTarget->retain();
pRenderTarget->beginWithClear(place_holder_color_f.r, place_holder_color_f.g, place_holder_color_f.b, place_holder_color_f.a );
pRenderTarget->end();
// pRenderTarget->saveToFile( “test.png”, kCCImageFormatPNG );
CCImage *pImage = pRenderTarget->newCCImage();
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addUIImage(pImage, “XXXXXXXXXXXXXXXXX”);
// pTexture ->retain();
CC_SAFE_DELETE(pImage);
CC_SAFE_RELEASE( pRenderTarget );
UIImageView * pPlaceHolderImage = UIImageView::create();
pPlaceHolderImage->setTexture( “XXXXXXXXXXXXXXXXX”);
CCPoint pos = textfield1->getPosition();
pPlaceHolderImage->setPosition( pos );
pPlaceHolderImage->addTouchEventListener( this, toucheventselector(TestScene::imagePlaceHolderCallback));
pPlaceHolderImage->setTouchEnable( true );
textfield1->getParent()->addChild( pPlaceHolderImage );
pPlaceHolderImage = UIImageView::create();
pPlaceHolderImage->setTexture( “XXXXXXXXXXXXXXXXX”);
pos = textfield2->getPosition();
pPlaceHolderImage->setPosition( pos );
pPlaceHolderImage->addTouchEventListener( this, toucheventselector(TestScene::imagePlaceHolderCallback));
pPlaceHolderImage->setTouchEnable( true );
textfield2->getParent()->addChild( pPlaceHolderImage );