在SDWebImage3.7.5源码阅读二中看完后,已经知道SDWebImageCombinedOperation
类的cacheOperation属性就是在图片下载前准备搜索一下缓存(memory、disk)做用的。html
在cacheOperation搜索完缓存以后:前端
operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) { ... operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) { ...//一大串 options的操做 暂时无论它 //终于见到了下载操做! id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url options:downloaderOptions progress:progressBlock completed ... }
其中self.imageDownloader
也是SDWebImageManager init的时候生成的,是SDWebImageDownloader
对象,跳转到downloadImageWithURL
中:缓存
- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock { __block SDWebImageDownloaderOperation *operation; __weak __typeof(self)wself = self; [self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{ //生成对应的URL NSMutableURLRequest *request = ... //下载进度 下载完成 取消等操做 operation = [[wself.operationClass alloc] initWithRequest ... }]; ... //开始下载 [wself.downloadQueue addOperation:operation]; }
而后查看SDWebImageDownloaderOperation
能够看到下载实现是靠 NSURLConnection
完成的,下载进度什么的固然就是NSURLConnectionDataDelegate
里完成的。异步
图片下载完后有个decode操做:url
image = [UIImage decodedImageWithImage:image];
到这里整理一下主要的流程:3d