我有两个场景,两个场景共享一个相同的背景图像所以我在下面的代码中都有两个场景的init方法并添加了。一切都很完美。我的问题是,因为同一个图像文件被读取两次,分配内存并解除分配,所以为什么我们不能使用单例模式将它存储到一个公共位置(spriteManager)并重用该实例?如果我这样做,当场景被场景2替换时,内存将被释放。
我想到的一点是保留,但不确定如何以及在何处处理此保留。如果处理Common可重用精灵的方法不对,请建议我采用相同的方法。我是这个cocos2d的新手,所以我还没有读过精灵表的概念,现在我想保持一切简单。
CCSprite *bg = [CCSprite spriteWithFile:@"bg.png"];
第二个问题,我在更换两个重型场景时读到,由于释放第一个场景内存并分配下一个场景内存的重叠,会有一些内存泄漏的可能性。所以为了避免这种情况,我读到了我们必须暂停加载一个轻量级场景(加载场景)。这是一个很好的解决方案,或者替换场景本身不会产生任何问题。
如果有关于此帖子标题的好文章(重用精灵和替换场景)会很棒。
答案 0 :(得分:3)
要回答你的第一个问题,你不需要一个spriteManager,因为cocos2D已经有了一个默认的纹理缓存机制(参考ccTextureCache类),当你下次调用spriteWithFile它只是从纹理缓存中加载纹理时。注意:当存在内存警告时,ccTextureCache通常会清除其纹理。
其次,如果已正确释放对象,则在替换场景时不应有任何内存泄漏。你能提供一个链接到你读到的地方吗?