2012-01-07 109 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] ];