将UIImageView切换到另一个图像时经历延迟,如何预分配?

时间:2015-04-18 01:36:05

标签: ios objective-c xcode memory uiimageview

在Xcode中,我有7个不同颜色的背景图像,每次在游戏中获得另外10个点时都会循环显示。

然而,在第一次玩游戏时,当它改变背景时它会滞后,因为它需要将它分配给内存然后加载它。

如何在级别开始之前将所有这些图像分配到内存中,以便它可以简单地切换到内存并且没有延迟。

1 个答案:

答案 0 :(得分:0)

您可以将背景存储到NSCache中,它像NSDictionary一样使用。

NSCache *cache = [NSCache new]; // You should ivar this somewhere

然后创建一个类似

的方法
-(UIImage *)loadImageWithKey:(NSString *)key {
  UIImage *image = [cache objectForKey:key];
  if (image == nil) {
    image = [UIImage imageNamed:key];
    [cache setObject:image forKey:key];
  }
  return image;
}

这会让你的游戏变得精简,如果遇到内存问题,它会把所有内容都丢弃在缓存中,所以如果你的游戏丢失缓存,你的游戏会有点慢,但你不会内存问题崩溃。

然后你所做的只是在你的加载屏幕上调用loadImageWithKey:无论什么资源,当需要它在更改背景时再次调用它并使用返回UIImage。

如果您仍然无法加载,那么您需要保持较小的背景,或者针对游戏,SpriteKit,SceneKit,Unity3D等更高效的内容进行构建。