zoukankan      html  css  js  c++  java
  • 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图如下:

      

      

      

      

      

  • 相关阅读:
    APP性能测试工具GT的使用总结:app内存测试
    app专项测试:app静态测试(耗时、流量、内存、图片大小)
    沟通的重要性
    [改善Java代码]推荐覆写toString方法
    [改善Java代码]使用package-info类为包服务
    [改善Java代码]不要主动进行垃圾回收
    [改善Java代码]推荐使用String直接量赋值
    [改善Java代码]在接口中不要存在实现代码
    [改善Java代码]不要随便设置随机种子
    [改善Java代码]优先使用整型池
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/9645022.html
Copyright © 2011-2022 走看看