目前,我有一个菜单场景,在其中我将精灵表添加到帧缓存中。我反复离开菜单场景并返回。因此,每次重新加载菜单场景时,都会将相同的精灵表添加到帧缓存中。这是坏事吗?旧的是否被覆盖、忽略、更新、保留?我是否通过一遍又一遍地将相同的精灵表读取到帧缓存来泄漏内存或浪费内存?
问问题
147 次
1 回答
2
它既不浪费也不有害。这一切背后的关键组件是 CCTextureCache 和 CCSpriteFrameCache 单例。他们都在后台使用 NSMutableDictionary。当您“重新加载”纹理时,如果它已经被键入缓存,则“添加”操作会被静默省略(即不会重新读取和重新加载纹理),并且调用方法会从当前返回适当的纹理在缓存中。
对于精灵帧缓存,当读取.plist时,会创建一个精灵帧对象,为plist中的每个key设置嵌入的CCSpriteFrame。因此,当您重新加载时,所有以前的 CCSpriteFrame 对象都将被释放(假设您没有将它们保留在代码中的其他位置,例如,如果您保留引用它们的 CCAnimation)。
您必须关心的实际资源是时间和内存。当您离开菜单时,如果“目标”受内存限制,您可以在分配所需资源之前移除未使用的纹理和未使用的精灵帧。完成此操作后,当您返回菜单时,将重新读取和重新加载纹理(对 CCSpriteFrame 的额外影响非常小)。您必须自己确定这是否会引入不可接受的延迟,并以此为基础决定重新添加未使用的纹理……但是请在设备上而不是模拟器上执行此操作。
于 2012-06-06T01:48:19.890 回答