• iOS 开发之 SDWebImage 底层实现原理分析


      SDWebImage 是一个比较流行的用于网络图片缓存的第三方类库。这个类库提供了一个支持缓存的图片下载器。为了方便操作者调用,它提供了很多 UI 组件的类别,例如:UIImageView、UIButton、等等。

      使用方式很简单:

      1、CocoaPods 安装:

      platform :ios, '7.0'
      pod 'SDWebImage', '~> 4.0'

      2、直接把文件夹拖进工程目录:

      在使用时只需要引入头文件,就可以使用相关 API 进行网路图片缓存了。例如:

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

      工程目录如下:

    SDWebImage
    |—-SDWebImageCompat 处理不同平台(iOS、TV、OS、Watch)宏,以及根据文件名@2x、@3x进行图片处理和缩放
    |—-SDWebImageOperation.h 添加cancel的delegate
    +—-Cache
    |——–SDImageCache 主要处理缓存逻辑,重点集中在:NSCache(Memory)、Disk读写、清理Old File
    |——–SDImageCacheConfig 配置缓存参数:是否压缩、iCloud、InMemory、ReadingOption、时间和CacheSize
    +—-Downloader
    |——–SDWebImageDownloaderOperation 主要提供下载的Operation操作
    |——–SDWebImageDownloader 提供下载管理入口
    +—-Utils
    |——–SDWebImageManager 提供外层管理cache和download入口
    |——–SDWebImagePrefetcher 预处理获取Image,主要应用预加载的地方
    +—-Categories
    |——–NSData+ImageContentType 提供类型判断和ImageIO类型转换
    |——–UIImage+GIF Data转UIImage(GIF)扩展
    |——–UIImage+MultiFormat 提供BitMap或者未知类型的Data转UIImage扩展
    |——–UIImage+WebP Data转WebP扩展
    |——–UIImage+ForceDecode 解压操作
    |——–UIView+WebCacheOperation 提供顶层关于取消和下载记录的扩展
    +—-Decoder
    |——–SDWebImageCodersManager 整体Coders的入口,提供是否可Coder和Coder转发
    |——–SDWebImageCoder 主要说明Coder Delegate 需要实现的接口
    |——–SDWebImageImageIOCoder PNG/JPEG的Encode和解压操作
    |——–SDWebImageGIFCoder GIF的Coder操作
    |——–SDWebImageWebPCoder WebP的Coder操作
    |——–SDWebImageFrame 辅助类,主要在GIF等动态图使用
    |——–SDWebImageCoderHelper 辅助类,包括方向、Gif图合成等    

      组件结构图(来自网络):

      

      

      SDWebImage 工程架构UML图如下:

      

      

      

      

      

  • 相关阅读:
    1360 奇怪的电梯(lift)
    1249 Lake Counting
    1330 【例8.3】最少步数
    1329 【例8.2】细胞
    1215 迷宫
    垃圾树
    vector
    1970:【15NOIP普及组】扫雷游戏
    1251:仙岛求药
    Python3+PCAN-USB基于PCAN-Basic二次开发实现上位机功能
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/9645022.html
Copyright © 2020-2023  润新知