目前,我有一个菜单场景,我在其中将 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/