美文网首页
SDWebImage源码解读(一)

SDWebImage源码解读(一)

作者: 落叶兮兮 | 来源:发表于2020-06-28 14:44 被阅读0次

SDWebImageManager

SDWebImageManager是UIImageView+WebCache类别后面的类。
*它绑定了异步下载器(SDWebImageDownloader)和图像缓存存储(SDImageCache)。可以直接使用这个类,以便在其他上下文中使用缓存下载web图像UIView。

首先,定义了SDWebImageOptions的枚举类,各个枚举类的含义如下

//当图片下载失败的时候正常情况下该URL会被列入黑名单,这个标志表示禁止黑名单,即下载失败会重新尝试下载
 SDWebImageRetryFailed = 1 << 0,
//默认情况下图片下载是在UI交互期间启动的,这个标志禁用了这个特性,
导致UIScrollView减速延迟下载
SDWebImageLowPriority = 1 << 1,
//图片下载完成后,图片禁止缓存在磁盘,仅缓存在内存中
SDWebImageCacheMemoryOnly = 1 << 2,
//默认情况下,图片在完全下载后显示且仅显示一次,该标志支持渐进式下载,图像在下载过程中会像浏览器一样逐步显示
SDWebImageProgressiveDownload = 1 << 3,
/*
即使图像已被缓存,也要遵守HTTP响应缓存控制,并在需要时从远程位置刷新图像。
磁盘缓存将由NSURLCache处理,而不是SDWebImage,这会导致轻微的性能下降。
*/
//帮助处理同一请求URL背后的图片变化,一旦缓存的映像刷新了,就会调用一次缓存图像完成的block和最终图像完成的block
SDWebImageRefreshCached = 1 << 4,
//如果app进入后台,该标志表示会向系统请求额外的时间来让请求完成,如果后台任务释放,该请求也会被取消
SDWebImageContinueInBackground = 1 << 5,
//通过NSMutableURLRequest处理存储在NSHTTPCookieStore中的cookie
SDWebImageHandleCookies = 1 << 6,
//启用允许不受信任的SSL证书。用于测试目的。在生产中小心使用
SDWebImageAllowInvalidSSLCertificates = 1 << 7,
//默认情况下,下载任务是按照它们被放入队列的顺序执行的,这个标志表示将任务移到队列的前面,即优先下载。
SDWebImageHighPriority = 1 << 8,
//默认情况下,占位符图片会在图片加载时加载。这个标志将延迟加载占位符图像,直到图像完成加载。
SDWebImageDelayPlaceholder = 1 << 9,
//我们通常不会在动画图像上调用transformDownloadedImage委托方法,因为大多数转换代码会出错。无论如何都要使用这个标志来转换它们。
SDWebImageTransformAnimatedImage = 1 << 10,
//默认情况下,图像会在下载后添加到imageView中。但在某些情况下,我们想在设置图像之前先动手(例如应用滤镜或添加交叉淡入动画)如果您想在完成成功时手动设置图像,请使用此标志
SDWebImageAvoidAutoSetImage = 1 << 11,
//默认情况下,图像根据其原始大小进行解码。在iOS上,这个标志会将图像缩小到与受限的设备内存兼容的大小。如果' SDWebImageProgressiveDownload '标志被设置,缩放是停用的
SDWebImageScaleDownLargeImages = 1 << 12,
//默认情况下,当映像缓存在内存中时,我们不查询磁盘数据。这个掩码可以强制同时查询磁盘数据。这个标志建议与' SDWebImageQueryDiskSync '一起使用,以确保图像加载在同一个runloop中。
SDWebImageQueryDataWhenInMemory = 1 << 13,
//默认情况下,我们同步查询内存缓存,异步查询磁盘缓存。这个掩码可以强制同步查询磁盘缓存,以确保映像加载在同一个runloop中。如果禁用内存缓存或在其他情况下,此标志可以避免在单元格重用期间闪烁。
SDWebImageQueryDiskSync = 1 << 14,
//默认情况下,当缓存丢失时,将从网络下载映像。此标志只能防止网络从缓存加载。
SDWebImageFromCacheOnly = 1 << 15,
//默认情况下,当你使用“SDWebImageTransition”在图片加载完成后进行一些视图转换时,这种转换只适用于从网络下载图片。此掩码还可以禁止内存和磁盘缓存应用视图转换。
SDWebImageForceTransition = 1 << 16

定义了SDWebImageManagerDelegate协议,协议方法是@optional类型,各个协议方法的作用如下:

//当image在缓存中找不到时,应该通过url下载,默认返回YES,NO的话表示阻止下载
- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldDownloadImageForURL:(nullable NSURL *)imageURL;
//当下载错误时,是否应该将URL标记为失败,返回YES表示标记
- (BOOL)imageManager:(nonnull SDWebImageManager *)imageManager shouldBlockFailedURL:(nonnull NSURL *)imageURL withError:(nonnull NSError *)error;
//在image下载完成后并在在缓存在磁盘或者内存之前变换图像,并且该方法要在全局队列中调用,放置阻碍主线程
- (nullable UIImage *)imageManager:(nonnull SDWebImageManager *)imageManager transformDownloadedImage:(nullable UIImage *)image withURL:(nullable NSURL *)imageURL;

各个属性的含义就不再列出,如果后面有涉及的话再提及,在SDWebImageManager.h中定义的各个方法的作用如下:

//根据给定的url下载图片
- (nullable id <SDWebImageOperation>)loadImageWithURL:(nullable NSURL *)url
                                              options:(SDWebImageOptions)options
                                             progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
                                            completed:(nullable SDInternalCompletionBlock)completedBlock;
//根据给定的url将图片存入缓存中
- (void)saveImageToCache:(nullable UIImage *)image forURL:(nullable NSURL *)url;
//取消当前所有的操作
- (void)cancelAll;
//检查是否有一个或者多个操作正在执行
- (BOOL)isRunning;
//异步检查图像是否被缓存,当检查完成时会执行SDWebImageCheckCacheCompletionBlock代码块。相应的完成的block都是在主队列中执行
- (void)cachedImageExistsForURL:(nullable NSURL *)url
                     completion:(nullable SDWebImageCheckCacheCompletionBlock)completionBlock;
//异步检查图像是否被缓存在磁盘
- (void)diskImageExistsForURL:(nullable NSURL *)url
                   completion:(nullable SDWebImageCheckCacheCompletionBlock)completionBlock;
//根据被给定的url返回缓存的key
- (nullable NSString *)cacheKeyForURL:(nullable NSURL *)url;

SDWebImage源码阅读(一)
SDWebImage源码阅读(二)
SDWebImage源码阅读(三)
SDWebImage源码阅读(四)
SDWebImage源码阅读(五)
SDWebImage源码阅读(六)

相关文章

网友评论

      本文标题:SDWebImage源码解读(一)

      本文链接:https://www.haomeiwen.com/subject/afdifktx.html