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纹理,还是需要从缓存中释放?
答案 0 :(得分:3)
使用正确的工具可以回答大多数问题。在这种情况下,stackoverflow不是工具。 Instruments is
您也可以使用Vulcan逻辑来解决此问题。这段代码正被全球数千名开发人员使用。对于已存在超过3年的软件库,此代码导致内存泄漏的概率必须考虑infinitesimal。
答案 1 :(得分: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] ];