在AlamofireImage中一共就只有5个类加一些扩展
// 错误处理类,继承自Error,主要有requestCancelled(请求取消)、imageSerializationFailed(请求失败)两种错误 |
一、图片加载过程
AlamofireImage中的扩展定义了很多快速对UI控件设置图片的方法,我挑其中一个来详解AlamofireImage是怎样将图片加载到视图上的
// 该方法是UIImageView的一个扩展方法,其它控件的扩展方法都差不多一样 |
下面是下载类核心方法和注解
@discardableResult |
总结下载过程
1.在内存缓存对象(ImageCache)中获取缓存,如果有则返回图片
2.在NSURLCache中获取缓存(内存缓存+磁盘缓存),如果有则返回图片
3.开始网络下载图片,成功后返回图片
4.缓存图片
5.检查是否使用滤镜、加载动画等加载图片
二、缓存实现
1.ImageCache,实际上它只是一个协议,真正缓存的对象是CachedImage
class CachedImage { |
在ImageCache协议中有如下几个方法
/// 通过标识符添加一个缓存图片 |
实际对图片存储的类是AutoPurgingImageCache,它实现了ImageCache协议,下再来看一下它的一些属性
// 最大内存容量 |
下面是添加缓存的核心函数
open func add(_ image: Image, withIdentifier identifier: String) { |
2.NSURLCache,它我这里就不具体讲了,有兴趣的可以看这篇文章 http://nshipster.cn/nsurlcache/
三、加载动画和滤镜
对于这一部分内容,我自己也没有使用过,所以下面只贴出源码加注释,有兴趣的读者可以自己去研究
1.动画
// 加载动画(是用UIView的动画来实现的) |
2.滤镜
// 将图片变化到指定大小 |
3.CoreImage 滤镜具体实现的核心函数
extension UIImage { |