关于TextureCache的释放问题

Win32 环境:Cocos2d-x V 2.2.2, CocoStudio V1.2.0

在一个CCScene子类的OnEnter中通过widgetFromJsonFile载入ExportJson文件,
在OnExit中调用removeAllChildren, 然后在该类的释构函数中调用CCTextureCache::shareTextureCache()->removeUnusedTextures()时发现ExportJson关联的png文件还在TextureCache中且m_uReference>1.

请问应该怎样释放ExportJson关联的png?

同问:2::2::2:

我也正好在找这个问题,因为现在打包大图之后手机上各种黑块

int texturesCount = DICTOOL->getArrayCount_json(*jsonDict, “textures”);

    for (int i=0; i<texturesCount; i++)
    {
        const char* file = DICTOOL->getStringValueFromArray_json(*jsonDict, "textures", i);
        std::string tp = jsonpath;
        tp.append(file);
        CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(tp.c_str());
    }

应该是从这里把texture放到cache里的
但是之后json文件被释放掉了,texture后面就没管了
需要释放的话可能要自己改这块内容了

今天发现另外一个问题,

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 );

你好,请问这个问题后来解决了吗。我也遇到了