• 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图如下:

      

      

      

      

      

  • 相关阅读:
    关于TFS中WorkItem的探究
    Pro Android4 面试题归纳
    truncate 、delete、drop
    获取数据库中所有表的行数及其他信息
    【转】高手速成android开源项目【View篇】
    Can't create handler inside thread that has not called Looper.prepare()解决办法
    Android使用获取HTML
    .net操作EXCEL
    ASP.NET发送邮件
    如何使用 MasterPage
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/9645022.html
Copyright © 2020-2023  润新知