您可能会在 CCTextureCache 单例中留下大量的精灵。每次创建 CCSprite 时,都会缓存(静默)纹理,以便下次引用它时,加载和呈现会更快(快得多)。在模拟器中运行分配分析(参见下面的两张图片):
和
顶部图像来自设备上的分配分析。最大内存 4.4 Mb。
底部图像是相同的应用程序,相同的游戏序列,同时在模拟器中进行分析(峰值约为 78 Mb)。通过在模拟器中运行,我可以在分配中看到我的精灵使用的内存。在设备中,分配工具不占用此内存。
您正在寻找趋势和离散的大跳跃。如果您再也没有回来,您可能会留下未使用的精灵。就我而言,我选择在游戏执行的特定点从纹理中释放特定资源。这是来自 appController 的示例
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
MPLOGERROR(@"Before purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];
MPLOGERROR(@"%After purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
}
这是最后一搏,蛮力清理。但是您可以在游戏过程中移除不同时间点的特定纹理,而不会影响应用程序的“感知”响应能力。缓存在原则上通常是合理的,但在资源受限时会迅速变得棘手。了解它,进行实验,最终您会找到“什么保持/什么继续”的正确组合,以实现流畅的应用程序性能。
附言。尽管模拟器对于某些测试很好,但不要将其“性能”用作基准。模拟器性能在图形方面毫无意义,它不使用您计算机的 GPU(这就是您看到图形内存分配的原因:))。