我有两个场景,两个场景共享相同的背景图像,所以我在两个场景的init方法中都添加了以下代码。一切正常。我的问题是,由于同一图像文件被读取两次,分配了内存并释放了,所以为什么我们不能使用单例模式将其存储在一个 public 位置(spriteManager)并重用该实例呢?如果我这样做,当场景1替换为场景2时,内存将被释放。
我想到的一个问题是保留,但不确定如何以及在何处处理此保留。如果我的方法在处理Common可重复使用的Sprite上是错误的,那么请向我建议正确的方法。我是这个cocos2d的新手,所以我还没有阅读Sprite Sheet的概念,现在我想使所有事情保持简单。
CCSprite *bg = [CCSprite spriteWithFile:@"bg.png"];
第二个问题,我读到在替换两个较重的场景时,由于释放第一个场景内存和分配下一个场景内存中的重叠,会有一些内存泄漏的机会。因此,为避免这种情况,我阅读了我们必须暂停一秒钟以加载轻量级场景(加载场景)。是一个好的解决方案,还是替换场景本身不会造成任何问题。
如果有关于此职位的好文章(重复使用Sprite和Replaceing场景),那将是很棒的。 。
最佳答案
要回答第一个问题,您不需要spriteManager,因为cocos2D已经具有默认的纹理缓存机制(请参阅ccTextureCache类),并且下次调用spriteWithFile时,它将仅从纹理缓存中加载纹理。注意:ccTextureCache通常在出现内存警告时清除其纹理。
其次,如果您正确地重新分配了对象,则替换场景时不应有任何内存泄漏。您是否可以提供指向有关此内容的链接?
关于iphone - COCOS2d-重用Sprite和Replace场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429025/