iOS技术中心iOS成仙之路iOS学习

iOS图片加载新框架 - FlyImage

2016-09-27  本文已影响1393人  大道至简啊
FlyImage

FlyImage 整合了SDWebImage,FastImageCache,AFNetworking的优点,是一个新的性能高效、接口简单的图片加载框架。

特点

  1. 可将多张小图解码后存储到同一张大图上,在同屏渲染多图时,效率极高;
  2. 支持mmap内存映射,高效的I/O操作,减少一次文件拷贝操作,同时减少内存占用;
  3. 支持Byte Alignment字节对其,渲染过程中,避免执行CA::Render::copy_image内存操作;
  1. 支持UIImageView,CALayer Category;
  2. 不用考虑小图片尺寸,简单的存储和读取接口;
  3. 一套方案同时解决单张大图和多张小图的两种业务场景;

流行框架对比

现在iOS上比较流行的两套图片加载框架:

基于上述的分析,如果有一个图片库可以将两者的优点结合在一起,那该多好!FlyImage就是基于此想法诞生的,新的库整合了FastImageCache的优化方案,同时让接口变得更加易用。

FlyImage可以在一个文件中绘制多张不同size的小图片,存储和获取时只需要一个固定的key;同时将内存映射的方法应用到大图片的显示方案中,减少内存的拷贝次数,加快读取速度。具体的使用方法如下:

如何使用

安装

platform :ios, '8.0'
pod 'FlyImage', '~>1.0'

使用 UIImageView/CALayer

UIImageView *iconView = [[UIImageView alloc] initWithFrame:frame];
[iconView setIconURL:[NSURL urlWithString:@"http://original"]];
[]self.view addSubview:iconView];

使用 FlyImageCache

// 通过Key获取单张图片
[[FlyImageCache sharedInstance] asyncGetImageWithKey:key
                                           completed:^(NSString *key, UIImage *image) {
        imageView.image = image;
}];

// 删除一张图片
[[FlyImageCache sharedInstance] removeImageWithKey:key];

// 清除所有图片
[[FlyImageCache sharedInstance] purge];

使用 FlyImageIconCache

// 添加一张小图
[[FlyImageIconCache sharedInstance] addImageWithKey:key
        size:drawSize
        drawingBlock:^(CGContextRef context, CGRect contextBounds) {
            // 手动绘制
            UIImage *image = [UIImage imageWithName:@"imageName"];

            UIGraphicsPushContext(context);
            [image drawInRect:contextBounds];
            UIGraphicsPopContext();
        }
        completed:nil];

// 获取一张小图
[[FlyImageCache sharedInstance] asyncGetImageWithKey:key
                                           completed:^(NSString *key, UIImage *image) {
        imageView.image = image;
}];

性能

Memory

测试工程: FlyImageView / Device: iPhone6 Plus,滚动列表中连续显示多张大图,FlyImage不会增加Image IO的内存

Memory FlyImage SDWebImage UIKit
All Heap Allocations 2~7M 2~4M 2~5M
All Anonymous VM 17~30M 310M 17~30M

FPS

测试工程: FlyImageIconView / Device: iPhone6 Plus,同屏渲染170张小图,FlyImage顺滑的浏览体验

FlyImage SDWebImage UIKit
58~60FPS 6~7FPS 6~7FPS
同屏多图

类图

类图

源代码

https://github.com/northwind/FlyImage ,欢迎大家测试并给予反馈,谢谢。

Reference

  1. FastImageCache
  2. SDWebImage
  3. 认真分析mmap:是什么 为什么 怎么用
上一篇 下一篇

猜你喜欢

热点阅读