关于UIImageView帧动画内存无法释放的问题
2016-07-01 本文已影响0人
xSirFting
我们在使用UIImageView帧动画时会碰到加载到内存的图片不会自动释放,占用很多的内存,这时我们可能使用 :
[UIImage imageWithContentsOfFile:xxx.png]
并配合
imageView.animationImages = nil;
来清理不用的缓存动画图片。
具体如下:
示例图片.pngUIImageView帧动画相关属性和方法:
需要播放的序列帧图片数组(里面都是UIImage对象,会按顺序显示里面的图片)
@property(nonatomic,copy) NSArray *animationImages;
帧动画的持续时间
@property(nonatomic) NSTimeInterval animationDuration;
帧动画的执行次数(默认是无限循环)
@property(nonatomic) NSInteger animationRepeatCount;
开始执行帧动画
- (void)startAnimating;
停止执行帧动画
- (void)stopAnimating;
是否正在执行帧动画
- (BOOL)isAnimating;
例:加载动画图片的方式
1.加载所有的动画图片
NSMutableArray *images = [NSMutableArray array];
for (int i = 0; i<10 i++){
// 计算文件名
NSString *filename = [NSString stringWithFormat:@"%@_d.jpg", name, i];
[images addObject:filename];
}
// 加载图片
// imageNamed: 有内存缓存直到程序退出才释放 (传入文件名)
// UIImage *image = [UIImage imageNamed:filename];
// imageWithContentsOfFile: 没有缓存,自动释放(传入文件的全路径)
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:filename ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:path];
// 添加图片到数组中
[images addObject:image];
self.imageView.animationImages = images;
2.设置播放次数(1次)
self.imageView.animationRepeatCount = 1;
3.设置播放时间
self.imageView.animationDuration = images.count * 0.05;
[self.imageView startAnimating];
4.动画放完1秒后清除内存
CGFloat delay = self.imageView.animationDuration;
// setAnimationImages: 方法也就是步骤一的代码
[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:delay];