Does UIImageView cache images?

2019-01-23 08:34发布

Probably I'm gonna ask the same question which was asked by other person (But it has no responses):
Speed up first UIImageView animation (force cache the images)

But, My short question is:
I have 60 images in resources, in timeinterval loop I'm gonna animate that images, each time setting to UIImageView.image the n'th image from resouce.

The problem is: first animation is bad! When I loop all images again in same UIImageView, animation is perfect. Can we pre cache images in UIImageView?

EDIT: Or maybe we can make some tricks, to make animation smooth?

3条回答
不美不萌又怎样
2楼-- · 2019-01-23 08:44

No, UIImageView does not cache images. image property declared as retain, so when you set new image, then imageView send release message to old image and retain to new one.

The easiest way to animate UIImageView is to set array of images to property animationImages and call startAnimating method

imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil];
imageView.animationDuration = 2.0f;
[imageView startAnimating];
查看更多
放荡不羁爱自由
3楼-- · 2019-01-23 08:53

UIImageView does not cache the image, as [UIImage imageNamed:@""] does. Unfortunately, if you have a lot of images, imageNamed will crash your application because it runs out of memory.

You can pre-load all of the images in an NSArray using [UIImage imageWithContensOfFile:@""]. Once you have the array, you can do what you want!

查看更多
淡お忘
4楼-- · 2019-01-23 09:02

The method [UIImage imageNamed:@""] caches the image. The UIImageView doesn't. I had a problem in an app with a lot of images that was crashing due to low memory. To fix if I changed to [UIImage imageWithContentsOfFile:@""] that does not caches the image.

To pre-cache the image you can simply call [UIImage imageNamed:@""] for all images you want in the init method. But if you receive a memory warning the images gonna be deallocated.

查看更多
登录 后发表回答