1

我有 2 个场景,两个场景共享相同的背景图像,所以我在两个场景的 init 方法中都有下面的代码并添加。一切正常。我的问题是,既然同一个图像文件被读取了两次,分配了内存并解除了分配,那么为什么我们不能使用单例模式将它存储在一个公共位置(spriteManager)并重用该实例?如果我这样做,当场景 1 被场景 2 替换时,内存将被释放。

我想到的一个是保留,但不知道如何以及在哪里处理这个保留。如果我的处理通用可重用精灵的方法是错误的,那么请建议我做同样的正确方法。我是这个 cocos2d 的新手,所以我还没有阅读 sprite sheet 的概念,现在我想保持一切简单。

CCSprite *bg = [CCSprite spriteWithFile:@"bg.png"];

第二个问题,我在替换两个重场景时阅读,由于释放第一个场景内存和分配下一个场景内存的重叠,会有一些内存泄漏的机会。因此,为了避免这种情况,我读到我们必须暂停几秒钟来加载轻量级场景(加载场景)。这是一个好的解决方案还是替换场景本身不会产生任何问题。

如果有一篇关于这篇文章标题的好文章(重用 Sprite 和替换场景),那就太好了。.

4

1 回答 1

3

要回答你的第一个问题,你不需要 spriteManager,因为 cocos2D 已经有一个默认的纹理缓存机制(参考 ccTextureCache 类),当你下次调用 spriteWithFile 时,它​​只会从纹理缓存中加载纹理。注意:ccTextureCache 通常在出现内存警告时清除其纹理。

其次,如果您已正确释放对象,则在替换场景时不应该有任何内存泄漏。你能提供一个链接到你读到这个的地方吗?

于 2012-09-14T17:34:22.193 回答