ios - 重复将相同的 spritesheet 重新加载到帧缓存中是否浪费?

标签 ios cocos2d-iphone

目前,我有一个菜单场景,我在其中将 spritesheet 添加到帧缓存中。我反复离开菜单场景并返回。因此,每次重新加载菜单场景时,都会将相同的 spritesheet 添加到帧缓存中。这是坏事吗?旧的是否被覆盖、忽略、更新、保留?我是否通过一遍又一遍地将相同的 spritesheet 读取到帧缓存来泄漏内存或浪费内存?

最佳答案

既不浪费也不有害。所有这一切背后的关键组件是 CCTextureCache 和 CCSpriteFrameCache 单例。他们都在后台使用 NSMutableDictionary。当你“重新加载”一个纹理时,如果它已经被输入到缓存中,“添加”操作会被默默地省略(即纹理不会被重新读取和重新加载),并且调用方法会从当前的纹理中返回适当的纹理在缓存中。

对于 Sprite 帧缓存,当读取.plist 时,会创建一个 Sprite 帧对象,为plist 中的每个键设置嵌入式CCSpriteFrame。因此,当您重新加载时,所有以前的 CCSpriteFrame 对象都将被释放(假设您没有在代码中的其他地方保留它们,例如,如果您保留引用它们的 CCAnimation)。

您必须关心的实际资源是时间和内存。当您离开菜单时,如果“目的地”内存受限,您可以在分配那里所需的资源之前删除未使用的纹理和未使用的 Sprite 帧。完成后,当您返回菜单时,纹理将被重新读取和加载(对 CCSpriteFrame 的影响很小)。您必须自己确定这是否会引入 Not Acceptable 滞后,并根据您决定是否删除未使用的纹理...但是请在设备上执行此操作,而不是模拟器。

关于ios - 重复将相同的 spritesheet 重新加载到帧缓存中是否浪费?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904336/

相关文章:

ios - 创建模糊叠加 View

cocos2d-iphone - 从发射器移动所有粒子

objective-c - Objective C for 循环延迟

cocos2d-iphone - 为什么userdata设置为self?

ios - RxSwift 对一个可观察对象的多个订阅

ios - UIBezierPath - 添加圆角

ios - 使文本字段背景透明,但占位符文本不透明

ios - 在 iOS 上添加到主屏幕按钮显示 "app"而不是我的应用程序名称

ios - 在 Cocos3d 中播放音频文件

iphone - cocos2d 中的 Twitter 和 facebook 集成