OC学习15:SDWebImage探索

张建 lol

简介

SDWebImage 是一个 异步加载图片的库,提供了一个UIImageView+WebCache类支持来自互联网的远程图片,具有缓存管理、异步下载、同一个URL次数控制和优化等特征。

SDWebImage 加载图片的流程

  1. 通过 UIImageView+WebCache 类调用 sd_setImageWithURL:placeholderImage调用 UIView+WebCache类中的方法sd_internalSetImageWithURL:placeholderImage:options:context:setImageBlock:progress:completed:,如果有占位图片,先显示占位图片,然后根据 url 处理图片。

  2. 如果内存缓存中没有图片,则从磁盘中查找,根据对URLMD5处理查找图片,如果找到图片,将图片添加到内存缓存,同时将找到的图片返回并显示。

  3. 如果磁盘和内存都找不到图片,则需要下载图片,通过共享或重新生成一个下载器SDWebImageDownloader下载图片。

  4. 图片下载由NSURLSession来完成,下载完成后对图片进行内存和磁盘缓存,并返回显示。

1
2
// 下载图片
operation.loaderOperation = [imageLoader requestImageWithURL:url options:options context:context progress:progressBlock completed:^(UIImage *downloadedImage, NSData *downloadedData, NSError *error, BOOL finished) {

SDWebImageView 缓存机制

  1. 首先,SDWebImage的图片缓存采用的是 memory(内存) 和 disk(磁盘) 双重机制,SDImageCache 中有 memoryCachediskCache 两个属性;memoryCache 是将图片存储在内存中 ; diskCache 是将图片放到 NSCacheDiretory 目录中,具体如下:
  • Memory内存中查找:SDImageCache中查找图片缓存,如果找到直接返回,反之进入硬盘查找

  • Disk硬盘中查找:如果硬盘中找到,还需要将图片存储到 memory 中 ,如果找不到,则下载

  • 下载:使用 downloader下载,失败加入failedURLS集合,下载拒绝再次加载,下载成功则写入 memorydisk,并返回显示

  • Disk缓存策略-APP在结束时执行清理任务:
    1)清除过期的缓存文件
    2)如果清除过期的缓存文件未满足条件,则先清除最早的文件,并且是折半清除。

  • Post title:OC学习15:SDWebImage探索
  • Post author:张建
  • Create time:2021-07-13 10:11:45
  • Post link:https://redefine.ohevan.com/2021/07/13/OC/OC学习15:SDWebImage探索/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
OC学习15:SDWebImage探索