SDWebImage初探

199 阅读2分钟

加载图片流程

  • 最基本的调用 image.png
  • 最终的实现方法

image.png

  • sd_internalSetImageWithURL
    • 1.判断当前是否有正在进行的任务
    • image.png
    • 2.更新占位图片
      image.png
    • 2.1判断是否在主队列中中执行,主队列一定是主线程执行 image.png
    • 3.加载图片
    • 3.1查找缓存 分为
      • 内存缓存(Memory:NSCache)UIImage
        • URL<->Image,如果URL不变,图片资源变了怎么处理
      • 磁盘缓存 二进制(文件)
      • NSURLCache:当前的HTTP缓存,不同的缓存策略。
    • 3.2网络请求(NSURLSession)
      • 下载:缓存策略设置
    • 3.3 图片解码
    • 4.图片的获取,真正的完成重点 image.png
    • 5.下载完成之后做什么 image.png
      • 1.自己处理图片
      • 2.placehodel需要延迟设置

下载模块的实现

  • 下载任务创建 image.png
  • 图片下载模块 image.png

image.png

  • 进入缓存查找 image.png

  • 检测是否需要进入缓存查找 image.png

  • key-根据当前的URL获取 image.png

  • 缓存策略的获取及真的的获取缓存图片方法 image.png

  • 校验内存缓存 image.png

  • NSOperation

缓存模块的实现

  • 内存缓存

    • NSCache
      • 好用的线程安全的类似字典NSDictionary的数据结构,里面有加锁机制
      • countLimit:最大缓存数
      • 系统自动处理回收
        • 1.缓存对象自身被释放
        • 2.手动调用API
        • 3.countLimit/缓存数> countLimit
        • 4.程序进入后台
        • 5.收到系统的内存警告

    image.png

    • 监听内存警告 image.png
    • 里面缓存的是UIImage
  • 查询磁盘缓存任务 image.png

  • 串行队列保证磁盘的读写只有一个任务执行。 image.png

  • @autoreleasepool 自动释放池保证了查询磁盘过程中生成的大量临时变量,在方法调用完毕之后能自动释放。

image.png

  • 以文件的形式查找缓存 二进制->NSData image.png

  • NSData->Image 解码只发生在内存缓存丢失的情况下。 image.png

  • 图片解码 image.png image.png image.png

  • data->SDImageFormat 返回图片的加载格式。 image.png

image.png

  • 当读取磁盘图片和图片格式设置完成后,缓存图片设置内存缓存 cost图片内存大小。 image.png

总结

  • 1.作用:
    • SDWebImageView的功能很强大,其中UIImageView+WebCach.h的功能主要是下载图片,设置图片缓存.
  • 2.原理:
    • 下载图片的原理:通过图片的网站地址URL异步下载图片;
    • 缓存图片的原理:下载完成的图片会被保存的内存和文件中;加载图片的时候首先会到内存中去找图片,如果没有就到文件中找,再没有才下载图片。
      大佬文章

image.png

image.png

image.png