Cocos2d iphone 释放所有纹理内存

Cocos2d iphone 释放所有纹理内存,cocos2d-iphone,Cocos2d Iphone,我通过以下方式加载具有巨大纹理的动画角色: [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"MyFile.plist"]; 之后,当我不再使用该角色时,我会使用以下方法释放内存: [[CCSpriteFrameCache sharedSpriteFrameCache]removeSpriteFramesFromFile:@"MyFile.plist"]; 而且: [[CCTextureCache sh

我通过以下方式加载具有巨大纹理的动画角色:

[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"MyFile.plist"];
之后,当我不再使用该角色时,我会使用以下方法释放内存:

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

[[CCTextureCache sharedTextureCache]removeTextureForKey:@"MyFile.png"];
只是想确定一下

我这样做是因为它使用的纹理消耗了大量内存,所以我确保我处理了它,这样我的应用程序就不会崩溃上述代码正确吗?

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


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

您是否也尝试过
purgeSharedTextureCache
,如下所述:


您也可以在应用程序代理方法中看到它,该方法在内存警告期间释放纹理。

您是否也尝试过
purgeSharedTextureCache
,如下所述:


你也可以在你的应用程序委托方法中看到它,该方法在内存警告期间释放纹理。

我通常使用暴力方法,如下所示:

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

在游戏流程中的特定时刻。按照宏伟的计划,让coco扫描其阵列的成本并不太高。就像你的情况一样,在我当前的游戏中,我必须装载和丢弃。CCTextureCache具有CCLOG’ing,允许您见证移除是在您预期的时间发生,还是在接近它时发生(自动释放有其特殊性)。如果没有,您可能会在某处保留纹理的某些句柄,例如精灵、批处理节点、动画或动作。

我通常使用暴力方法,如下所示:

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

在游戏流程中的特定时刻。按照宏伟的计划,让coco扫描其阵列的成本并不太高。就像你的情况一样,在我当前的游戏中,我必须装载和丢弃。CCTextureCache具有CCLOG’ing,允许您见证移除是在您预期的时间发生,还是在接近它时发生(自动释放有其特殊性)。如果没有,您可能会在某个地方保留纹理的某些句柄,例如精灵、批处理节点、动画或动作。

蛮力方法不是答案,但您确实指出了一个重要的问题:保留动画对象的可能性。事实证明,我已经允许NSMutableArray向其添加精灵帧,然后创建动画。我从未释放过数组,所以它们一直在堆积精灵帧内存。谢谢。蛮力方法不是答案,但你确实指出了一件重要的事情:保留cAnimation对象的可能性。事实证明,我已经允许NSMutableArray向其添加精灵帧,然后创建动画。我从未释放过数组,所以它们一直在堆积精灵帧内存。非常感谢。