一.主要功能类:
1.中心类SDWebImageManager , 负责调度图片的下载和缓存
2.SDImageCache 负责内存缓存和硬盘缓存(沙盒缓存)
3.SDWebImageDownloader 负责图片的下载
�二.过程: 当调用sd_webImageWithURL:方法缓存图片, SDWebImage库内部主要做了哪些事情呢?
1.寻找
首先SDImageCache类
从缓存中查找图片是否存在,
如果内存中有图片缓存,则回调方法,展示
如果内存缓存中没有,生成NSInvocationOoperation添加到队列, 根据urlKey去硬盘中查找图片是否存在, 若从硬盘中读取到了图片, 则将图片添加到内存缓存中, 并回调方法,展示
如果硬盘中读取不到图片,回调方法, 生成一个下载器SDWebImageDownloader开始下载图片
2.下载
下载是通过NSURLSession完成, 实现delegate来判断图片下载中, 下载完成, 下载失败
下载中 : 显示图片下载进度的效果
下载完成 : 交给SDWebImageDecoder 进行图片解码, 同样, 图片解码在一个NSOperationQueue中完成, 不会拖慢主线程UI
并回调给SDWebImageManager 告知图片下载完成, 并展示图片
3.保存
注意: 苹果提供给我们 NSCache类 进行内存缓存的管理,可以自己设置内存开销的限制
图片会通过SDImageCache 同时保存到内存缓存和硬盘缓存. 写文件到硬盘缓存也是在NSInvocationOperation中完成, 避免拖慢主线程
并且, SDImageCache在初始化的时候, 注册了关于内存的通知, 在内存收到警告或退出后台的时候, 清理内存图片缓存, 应用结束时, 清理过期图片