2012-01-07 111 views
1
CCSprite *sprite; 
sprite.texture = [[CCTextureCache sharedTextureCache] addImage: @"mySpriteImage.png"]; 
sprite.position = ccp(width/2.0f, height/2.0f); 
[self addChild:sprite z:2 tag:kTagMySprite]; 

... 

[sprite removeFromParentAndCleanup:YES]; 

上面的代碼中是否有內存泄漏? OpenGL紋理是發佈的,還是需要從緩存中釋放?在Cocos2d中,如何從OpenGL內存(GPU)釋放紋理?

+2

您不初始化精靈!因此你的代碼可能會崩潰! – Felix 2012-01-08 11:42:05

回答

3

大多數問題都可以通過使用正確的工具來解答。在這種情況下,stackoverflow不是工具。 Instruments is

你也可以用Vulcan邏輯來處理這個問題。這段代碼正在被全球數以千計的開發者使用。對於存在超過3年的軟件庫,此代碼導致內存泄漏的可能性必須被認爲是infinitesimal

+1

對不起,先生,我沒有設備證書,不能將模擬器連接到儀器。所以在這裏問,並與你的答案混淆。 – Guru 2012-01-08 14:57:27

+1

這是我的實際代碼.. – Guru 2012-01-08 14:58:15

+0

CCSprite * sprite = [CCSprite spriteWithFile:@「raj.png」]; sprite.texture = [[CCTextureCache sharedTextureCache] addImage:@「mySpriteImage.png」]; sprite.position = ccp(width/2.0f,height/2.0f); [self addChild:sprite z:2 tag:kTagMySprite]; ... [sprite removeFromParentAndCleanup:YES]; – Guru 2012-01-08 14:59:25

1

我得到了解決方案,其中一個調用從CCTextureCache中刪除紋理,並刪除OpenGL紋理(glGenTextures id)。

[[CCTextureCache sharedTextureCache] removeTexture:sprite3.texture]; 

OR 

[[CCTextureCache sharedTextureCache] removeTextureForKey:@"ImageName.png"]; 

OR 

[[CCTextureCache sharedTextureCache] removeTexture:[(CCSprite*)[self getChildByTag:kTagBackground] texture] ];