在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