Does UIImageView cache images?

2019-01-23 08:20发布

问题:

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?

回答1:

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.



回答2:

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!



回答3:

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];