目前,我有一个菜单场景,我将spritesheets添加到framecache。我反复离开菜单场景然后回去。因此,每次重新加载菜单场景时,相同的spritesheets都会添加到framecache中。这是坏事吗?旧的是否被覆盖,忽略,更新,保存?通过一遍又一遍地读取相同的spritesheets到framecache,我是在泄漏内存还是浪费内存?
答案 0 :(得分:2)
既不浪费也不危害。所有这些背后的关键组件是CCTextureCache和CCSpriteFrameCache单例。他们都在引擎盖下使用NSMutableDictionary。当你重新加载一个纹理时,如果它已经被锁定到缓存中,则会默默地省略'add'动作(即不会重新读取和重新加载纹理),并且从当前的一个纹理返回适当的纹理。在缓存中。
对于精灵帧缓存,当读取.plist时,会创建精灵帧对象,为plist中的每个键设置嵌入式CCSpriteFrame。因此,当您重新加载时,所有以前的CCSpriteFrame对象都将被释放(假设您没有将它们保留在代码中的其他位置,例如,如果您保留引用它们的CCAnimation)。
您必须关注的实际资源是时间和记忆。当您离开菜单时,如果“目标”受内存限制,您可以在分配所需资源之前删除未使用的纹理和未使用的精灵帧。完成后,当您返回菜单时,纹理将被重新读取并重新加载(对CCSpriteFrame的影响非常小)。你必须自己确定这是否会引入一个不可接受的延迟,并根据那个问题确定去除未使用的纹理......但是请在设备而不是模拟器上进行。