8 SDWebImage 流程

Posted jshuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8 SDWebImage 流程相关的知识,希望对你有一定的参考价值。

流程图:
 
技术分享图片
 
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
  1. NSOperation
 
 
类的作用及其关系:
 
技术分享图片
 
 
 

以上是关于8 SDWebImage 流程的主要内容,如果未能解决你的问题,请参考以下文章

SDWebImage原理(面试)

SDWebImage 原理及使用

iOS利用SDWebImage图片下载缓存

SDWebImage 库在 swift 3 Xcode 8.0 中出现错误

SDWebImage源码中阅读总结-那些不解和收获

SDWebImage源码阅读SDWebImagePrefetcher