关于UIImageView帧动画内存无法释放的问题

2016-07-01  本文已影响0人  xSirFting

我们在使用UIImageView帧动画时会碰到加载到内存的图片不会自动释放,占用很多的内存,这时我们可能使用 :

[UIImage imageWithContentsOfFile:xxx.png] 

并配合

imageView.animationImages = nil;

来清理不用的缓存动画图片。


具体如下:

示例图片.png

UIImageView帧动画相关属性和方法:
需要播放的序列帧图片数组(里面都是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];
上一篇下一篇

猜你喜欢

热点阅读