SDWebImage 源码分析

327 阅读1分钟

项目架构

  • Manager : 核心管理类
  • Downloader: 核心下载类
  • Cache :缓存类- 内存缓存、磁盘缓存
  • Decoder : 解码器 - 图片的格式
  • Prefetcher
  • Transformer: 图片转换 - 添加圆角、滤镜、旋转、模糊等
  • ImageView: 动图与动画
  • Utils: 常量与宏定义工具
  • Categories: UIView 及子类的加载 image 的扩展
  • WebCache Categories: UIView 及子类的缓存扩展

组织架构

主要描述了类与类之间的关系、实现、协议、属性、等

Manager

Manager 主要的管理实例,控制缓存、加载、变换、等属性,回调代理

缓存

解释

缓存的核心管理类、内存缓存和磁盘缓存。继承与NSCache

解码器

通过解码器,判断图片的类型:png、JPEG、GIF、webp等

Laoder

loader

Downloader核心类,主要用于下载管理,Operation

UIView Cache

主要是 UIView 及子类的扩展缓存,定义一些属性(通过 runtime 实现)

流程逻辑

ImageView 先调用category里的方法,通过ImageManager管理类,去找Cache和Loader里的图片,然后加载出来

加载流程

解释加载流程

从分析源码中我学到了什么?

  1. SDImageTransformer 等类的工厂模式与多态。
  2. 在操作一个 Operations 时,需要加锁,避免争资源的问题存在。
  3. 通过宏定义来满足在 iOS 和 Mac OS 等不同苹果设备的使用
  4. 可以通过协议的实现来扩展属性、参数、等,有较高的自定义性
  5. 实现一个目标的具体思路,流程等。