iOS 知识点移动开发ios 知识点

SDWebImage 4.x版本源码分析(一)图解!!!

2018-03-17  本文已影响969人  快乐的老船长

本文分析的 SDWebImage 版本为4.3.2。可以来这里下载一下源码注释

一、为什么会出现SDWebImage?
二、SDWebImage不同版本的区别
三、SDWebImage的使用
四、解读SDWebImage UML 类图 和 流程图
五、详细的类的解析和该类的流程
- UIView+WebCache、SDWebImageManager
- SDWebImageDownloader
- SDWebImageCache
- SDWebImageDownloaderOperatiion
- 问题总结


一、为什么会出现SDWebImage?

SDWebImage作者 Olivier Poitrey

在SDWebImage 1.0版本的文档里说,由于用网络图片对UITableView缺乏支持用起来很难受,Google一番后也没有发现有哪个简单的库来为您执行异步图像抓取+缓存工作。

于是他找了他的好朋友Sebastien Flory(Fraggle)寻求帮助,后来他发现用NSOperation类来管理并发,UITableView中图片的加载响应速度提升很多。因此他重写了Fraggle的实现。

二、SDWebImage不同版本的区别

2.x

3.x

新增功能:

4.x

说明上看起来没什么区别

从文件上看
新增

image.png image.png

对于GIF图的展示

4.x支持

向后兼容性

三、SDWebImage的使用

安装方法

// 必须
pod ‘SDWebImage'
// 可选 使用GIF
pod 'SDWebImage/GIF’
// 可选 使用WebP
pod 'SDWebImage/WebP’

使用

#import <SDWebImage/UIImageView+WebCache.h>

...

[imageView sd_setImageWithURL:[NSURL URLWithString:@"[http://www.domain.com/path/to/image.jpg](http://www.domain.com/path/to/image.jpg)"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

四、解读SDWebImage UML 类图 和 流程图

首先看一下UML图

image.png image.png
  1. 我们便于调用的类别依赖于UIView+WebCache,UIView+WebCache依赖于SDWebImageManager;
  2. SDWebImageManager 由 SDWebImageManagerDelegate、SDImageCache、SDWebImageDownloader 组成,聚合关系但不是强依赖;
  3. SDWebImageManager 依赖于 SDWebImageCombinedOperation,SDWebImageCombinedOperation实现了SDWebImageOperation的代理;
  4. SDImageCache 由 SDImageCacheConfig 组成,依赖 SDWebImageCodersManager;
  5. SDWebImageDownloader 依赖 SDWebImageDownloaderOperation、SDWebImageDownloadToken、SDWebImageCodersManager;
  6. SDWebImageCodersManager 由 SDWebImageWebPCoder、SDWebImageImageIOCoder、SDWebImageGIFCoder组成;
  7. SDWebImageCodersManager、SDWebImageGIFCoder 实现了 SDWebImageCoder 的代理,SDWebImageWebPCoder、SDWebImageImageIOCoder 实现了 SDWebImageCoder 的子类 SDWebImageProgressiveCoder 的代理;
  8. SDWebImageDownloaderOperation 继承于 NSOperation ,并实现了SDWebImageDownloaderOperationInterface 、SDWebImageOperation的代理;
  9. SDWebImagePrefetcher 由SDWebImageManager 和 SDWebImagePrefetcherDelegate 组成;
  10. SDWebImage 声明了 6个 Delegate。

在文件中的位置:


image.png

流程图:


image.png

从流程图上看,

  1. 通常我们使用 UIImageView+WebCache 里的方法来设置网络图片的;
  2. UIImageView+WebCache 的主要方法是调用 UIView+WebCache 里的方法;
  3. UIView+WebCache 负责给 UIImageView 设置图片,
    ** 通过 SDWebImageManager 加载到图片,
    ** 把得到的 image 设置给 UIImageView
  4. SDWebImageManager 沟通 SDImageCache 和 SDWebImageDownloader ,
    ** 首先通过 SDImageCache 查询到是否有缓存的图片;
    ** 接着如果需要下载,就通过 SDWebImageDownloader 下载图片;
    ** 然后如果需要缓存,把图片缓存给 SDImageCache ;

下一章,五、详细的类的解析和该类的流程

上一篇下一篇

猜你喜欢

热点阅读