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

我们在使用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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,585评论 6 30
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,149评论 5 13
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 引言
    G4hack阅读 291评论 0 1
  • 写 心中的烦风暴 叫脾气 分秒膨胀 自我 归一 搭讪 不理 不带消极 但很小气 你控诉我 我报复你 ...
    殷殷囷囷阅读 1,084评论 5 8