美文网首页
iOS 图片加载框架-SDWebImage 解读

iOS 图片加载框架-SDWebImage 解读

作者: 黄煎鱼 | 来源:发表于2018-11-08 13:44 被阅读0次

前言

在 iOS 的图片加载框架中,SDWebImage 可谓是占据大半壁江山。它支持从网络中下载且缓存图片,并设置图片到对应的 UIImageView 控件或者 UIButton 控件。在项目中使用 SDWebImage 来管理图片加载相关操作可以极大地提高开发效率,让我们更加专注于业务逻辑实现。

功能

1.提供了一个 UIImageView 的 category(分类)用来加载网络图片并且对网络图片的缓存进行管理
2.采用异步方式来下载网络图片
3.异步内存+磁盘映像缓存,并且自动处理过期的缓存图片
4.支持 GIF 动画
5.支持 WebP 格式
6.同一个 URL 的网络图片不会被重复下载
7.失效的 URL 不会被无限重试
8.耗时操作都在子线程,确保不会阻塞主线程
9.支持图片压缩跟解码
10....

文件结构图

文件结构图.png

解读SDWebImage UML 类图 和 流程图

说明.png
UML图.png

我们便于调用的类别依赖于UIView+WebCache,UIView+WebCache依赖于SDWebImageManager;
SDWebImageManager 由 SDWebImageManagerDelegate、SDImageCache、SDWebImageDownloader 组成,聚合关系但不是强依赖;
SDWebImageManager 依赖于 SDWebImageCombinedOperation,SDWebImageCombinedOperation实现了SDWebImageOperation的代理;
SDImageCache 由 SDImageCacheConfig 组成,依赖 SDWebImageCodersManager;
SDWebImageDownloader 依赖 SDWebImageDownloaderOperation、SDWebImageDownloadToken、SDWebImageCodersManager;
SDWebImageCodersManager 由 SDWebImageWebPCoder、SDWebImageImageIOCoder、SDWebImageGIFCoder组成;
SDWebImageCodersManager、SDWebImageGIFCoder 实现了 SDWebImageCoder 的代理,SDWebImageWebPCoder、SDWebImageImageIOCoder 实现了 SDWebImageCoder 的子类 SDWebImageProgressiveCoder 的代理;
SDWebImageDownloaderOperation 继承于 NSOperation ,并实现了SDWebImageDownloaderOperationInterface 、SDWebImageOperation的代理;
SDWebImagePrefetcher 由SDWebImageManager 和 SDWebImagePrefetcherDelegate 组成;
SDWebImage 声明了 6个 Delegate。

流程图1.png 流程图2.png

通常我们使用 UIImageView+WebCache 里的方法来设置网络图片的;
UIImageView+WebCache 的主要方法是调用 UIView+WebCache 里的方法;
UIView+WebCache 负责给 UIImageView 设置图片,
** 通过 SDWebImageManager 加载到图片,
** 把得到的 image 设置给 UIImageView
SDWebImageManager 沟通 SDImageCache 和 SDWebImageDownloader ,
** 首先通过 SDImageCache 查询到是否有缓存的图片;
** 接着如果需要下载,就通过 SDWebImageDownloader 下载图片;
** 然后如果需要缓存,把图片缓存给 SDImageCache ;

如何使用

#import <SDWebImage/UIImageView+WebCache.h>
//常规下载
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
    placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
//获取缓存大小
[SDImageCache sharedImageCache] getSize];
//清理内存
[[SDImageCache sharedImageCache] clearMemory];
//清理磁盘空间
[[SDImageCache sharedImageCache] clearDisk];

总结

  1. 学习OC 分类
  2. 学习类库文件目录
  3. 学习缓存多种方式(内存,文件,避免失败重试,缓存文件压缩)

探讨

1. 如何避免缓存图片,不同步问题?
2. 随心邮哪些地方可以加缓存(客户端/后台)
3. 随心邮redis内存不够时,怎么处理?

参考链接:
1.代码解读详细的
2.流程图清晰
3.其他

相关文章

网友评论

      本文标题:iOS 图片加载框架-SDWebImage 解读

      本文链接:https://www.haomeiwen.com/subject/oxrcxqtx.html