iOS基本功iOS面试

SDWebImage全季解读

2020-06-02  本文已影响0人  GitArtOS

重读SDWebImage

入题简介

SDWebImage 提供了 UIImageViewUIButtonMKAnnotationView 的图片下载分类,只要一行代码就可以实现图片异步下载和缓存功能。

功能简介

  1. 一个添加了web图片加载和缓存管理的UIImageView分类
  2. 一个异步图片下载器
  3. 一个异步的内存加磁盘综合存储图片并且自动处理过期图片
  4. 支持动态gif图
  1. 支持webP格式的图片
  2. 后台图片解压处理
  3. 确保同样的图片url不会下载多次
  4. 确保伪造的图片url不会重复尝试下载
  5. 确保主线程不会阻塞

实现原理

  1. 架构图(UML 类图)


    架构图.png
  2. 流程图(方法调用顺序图)

流程图.png

目录结构

类名 功能
SDWebImageDownloader 是专门用来下载图片和优化图片加载的,跟缓存没有关系
SDWebImageDownloaderOperation 继承于 NSOperation,用来处理下载任务的
SDImageCache 用来处理内存缓存和磁盘缓存(可选)的,其中磁盘缓存是异步进行的,因此不会阻塞主线程
SDWebImageManager 作为 UIImageView+WebCache 背后的默默付出者,主要功能是将图片下载(SDWebImageDownloader)和图片缓存(SDImageCache)两个独立的功能组合起来
SDWebImageDecoder 图片解码器,用于图片下载完成后进行解码
SDWebImagePrefetcher 预下载图片,方便后续使用,图片下载的优先级低,其内部由 SDWebImageManager 来处理图片下载和缓存
UIView+WebCacheOperation 用来记录图片加载的 operation,方便需要时取消和移除图片加载的 operation
UIImageView+WebCache 集成 SDWebImageManager 的图片下载和缓存功能到 UIImageView 的方法中,方便调用方的简单使用
UIImageView+HighlightedWebCache 跟 UIImageView+WebCache 类似,也是包装了 SDWebImageManager,只不过是用于加载 highlighted 状态的图片
UIButton+WebCache 跟 UIImageView+WebCache 类似,集成 SDWebImageManager 的图片下载和缓存功能到 UIButton 的方法中,方便调用方的简单使用
MKAnnotationView+WebCache 跟 UIImageView+WebCache 类似
NSData+ImageContentType 用于获取图片数据的格式(JPEG、PNG等)
UIImage+GIF 用于加载 GIF 动图
UIImage+MultiFormat 根据不同格式的二进制数据转成 UIImage 对象
UIImage+WebP 用于解码并加载 WebP 图片

工作流程

工作流程.png

常见问题

  1. 图片文件缓存的时间有多长:1周

_maxCacheAge = kDefaultCacheMaxCacheAge

  1. SDWebImage 的内存缓存是用什么实现的?

NSCache

  1. SDWebImage 的最大并发数是多少?

maxConcurrentDownloads = 6 是程序固定死了,可以通过属性进行调整!

  1. SDWebImage 支持动图吗?GIF
#import <ImageIO/ImageIO.h>
[UIImage animatedImageWithImages:images duration:duration];
  1. SDWebImage是如何区分不同格式的图像的
  1. SDWebImage 缓存图片的名称是怎么确定的!
  1. SDWebImage的内存警告是如何处理的!

实际工作,将缓存目录直接删除,再次创建一个同名空目录!

上一篇 下一篇

猜你喜欢

热点阅读