流程图:
1.UIimageView + WebCache 类 sd_setImageWithURL 方法,实现异步加载图片。
在分类中,实现 sd_imageURL属性,保存url .
将placeHolder 付给image
2. SDWebImageManager(单利),调用 downloadImageWithURL方法
检验url 是NSString NSURL 并进行转换。
创建 SDWebImageCombinedOperation对象
验证self.failedURLs 是否包含这个url,url为空等一系列判断。
self.runningOperations添加URL
3. SDImageCache对象(属性)调用 queryDiskCacheForKey 方法,参数key(url转为string),回调block。
跟库key在memCache( NSCache)属性中查找,是否含有image
如果h缓存中没有,起一个异步线程,去沙盒中查找,如果找到,解压并转为image。然后存进memCache属性中。
UIView + webCacheOperation 分类中, operationDictionary属性,存入
UIImageViewImageLoad = "<SDWebImageCombinedOperation: 0x600000029e40>"
4.沙盒执行完之后,回调block( SDWebImageManager中)。
制定优先级
调用 imageDownloader( SDWebImageDownloader)属性的 downloadImageWithURL方法,参数 url,options,progress,completedBlock,f返回值就是封装了request的 SDWebImageDownloaderOperation类
调用addProgressCallback
起一个( dispatch_barrier_sync)同步阑珊,在自己启的线程中, self.URLCallbacks属性用来存储 completedBlock( SDWebImageDownloaderCompletedBlock)。
设置超时时间,如果没有设置,默认15s ,然后封装 NSMutableURLRequest请求网络,拼接参数(cookies,headerd,等),operation的优先级, shouldDecompressImages属性等。
downloadQueue( NSOperationQueue)属性添加 operation
调用 SDWebImageDownloaderOperation对象的 initWithRequest方法,这个类用于下载。
c初始化SDWebImageDownloaderOperation类以后,将operation 加入到 NSOperationQueue中, [wself.downloadQueue addOperation:operation];
然后就会调用SDWebImageDownloaderOperation类中的start方法(重写的 NSOperation -start)
z知识点:1. dispatch_barrier_sync
- NSOperation
类的作用及其关系: