释放所有纹理内存

时间:2012-03-26 00:45:50

标签: cocos2d-iphone

我用这样一种巨大的纹理加载我的动画角色:

[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"MyFile.plist"];

后来,当我不再使用该角色时,我使用以下方式释放内存:

[[CCSpriteFrameCache sharedSpriteFrameCache]removeSpriteFramesFromFile:@"MyFile.plist"];

还有:

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

只是为了确定。

我这样做是因为它使用的纹理消耗了大量内存,因此我确保将其丢弃,以便我的应用程序不会崩溃。 以上代码是否正确?

无论如何,这是实际问题:我最终再次加载我的角色,并再次处理它。最终,在一对夫妇复活并杀死之后,应用程序崩溃了。日志没有说明,所以我可以怀疑它是由于记忆 - 这就是为什么我认为我没有正确处理纹理。

我确实需要创建和处理角色的纹理。我不能在游戏中预装它。

2 个答案:

答案 0 :(得分:4)

我通常使用蛮力方法如下:

    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
    [[CCTextureCache sharedTextureCache] removeUnusedTextures];

在游戏流程的特定时刻。在宏伟的计划中,使用coco扫描其阵列并不太昂贵。在你的情况下,在我目前的游戏中,我必须加载和沟渠。 CCTextureCache具有CCLOG,允许您见证删除是否实际发生在您期望或接近它(自动释放有其怪癖)。如果没有,你可能会在某处保留一些纹理句柄,精灵,批处理节点,CCAnimation或动作。

答案 1 :(得分:0)

您是否也尝试了purgeSharedTextureCache,如下所示:

http://www.cocos2d-iphone.org/api-ref/0.99.0/interface_c_c_texture_cache.html#ac673f75cd5418bdcecf1fb8717a40345

您也可以在App Delegate方法中看到它在内存警告期间释放纹理。