UIImageView是否缓存图像?

时间:2011-11-25 14:08:48

标签: ios caching animation uiimageview image-manipulation

可能我会问另一个人提出的同一个问题(但是没有回复):Speed up first UIImageView animation (force cache the images)

但是,我的简短问题是:
我在资源中有60个图像,在时间间隔循环中我将为这些图像设置动画,每次设置为 UIImageView.image 来自资源的 n'th 图像。

问题是:第一个动画很糟糕!当我在同一个UIImageView中再次循环所有图像时,动画是完美的。我们可以在UIImageView中预先缓存图像吗?

编辑:或者我们可以制作一些技巧,让动画流畅吗?

3 个答案:

答案 0 :(得分:18)

方法 [UIImage imageNamed:@""]  缓存图像。 UIImageView没有。我在一个应用程序中遇到问题,因为内存不足导致大量图像崩溃。 如果我更改为不缓存图像的[UIImage imageWithContentsOfFile:@""],则修复此问题。

要预先缓存图像,只需在init方法中为所需的所有图像调用[UIImage imageNamed:@""]即可。但如果你收到一个记忆警告图像将被解除分配。

答案 1 :(得分:4)

UIImageView不会像[UIImage imageNamed:@""]那样缓存图像。不幸的是,如果你有很多图像,imageNamed会使你的应用程序崩溃,因为它的内存不足。

您可以使用[UIImage imageWithContensOfFile:@""]预加载NSArray中的所有图像。 一旦你有阵列,你可以做你想做的!

答案 2 :(得分:2)

不,UIImageView不会缓存图像。 image属性声明为retain,因此当您设置新图像时,imageView会将release消息发送到旧图像,将retain发送到新图像。

为UIImageView设置动画的最简单方法是将图像数组设置为属性animationImages并调用startAnimating方法

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil];
imageView.animationDuration = 2.0f;
[imageView startAnimating];