调用流程图
源码阅读顺序:
1 SDWebImageDownloader + SDWebImageDownloaderOperation
2 SDWebImageManager
3 SDImageCache
4 UIImageView+WebCache UIView + WebCache
核心下载类
SDWebImageDownloaderOperation
继承自NSOperation, 使用用NSURLSession+NSURLReqeust负责图片具体下载任务。
提供下载进度回调,任务完成回调。
SDWebImageDownloader
单例管理:
队列:NSOperationQueue,管理下载队列
会话:NSURLSession,所有下载NSURLReqeust共用一个会话
字典:保存key:url value: downloaderOperation 保证,一个url start 到 finish这个过程中。如果在请求了同一个url,不会再开一个线程。
核心存储类
SDImageCache
单例管理
url: key
value: image
存储位置:内存+磁盘。
获取顺序:先内存,再磁盘。
核心管理类
SDWebImageManager
单例管理
1 判断url,是否在黑名单中。 在,直接返回
2 查找:从内存总查找 从磁盘中查找
3 下载SDWebImageDownloader下载
如果同时下载2个相同的url,实际下载一次,因为会被SDWebImageDownloader中有个字典: 保证第一个url 生成一个NSOperation, 第二个url直接去字典中就可以取到。
当下载完成是,url会被从字典中移除。 对于相同的url ,可以重复下载,但是不能同时下.载
UI控件
UIImageView+WebCache.h 实际调用的是 UIView+WebCache.h 中的方法。
UIView+WebCache.h 获取到图片后,判断自己是UIImageView 还是 UIButton,然后直接setImage.