相信对于广大的iOS开发者,对SDWebImage并不会陌生,这个框架通过给UIImageView和UIButton添加分类,实现一个异步下载图片并且支持缓存的功能。整个框架的接口非常简洁,每个类的分工都很明确,是很值得大家学习的。
在使用这个框架的时候,只需要提供一个下载的url和占位图就可以在回调里拿到下载后的图片:
1 | [imageview sd_setImageWithURL:[NSURL URLWithString:@"pic.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder"] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) { |
而且我们还可以不设置占位图片,也可以不使用回调的block,非常灵活:
1 | //图片下载完成后直接显示下载后的图片 |
在最开始先简单介绍这个框架:
这个框架的核心类是SDWebImageManger
,在外部有UIImageView+WebCache
和 UIButton+WebCache
为下载图片的操作提供接口。内部有SDWebImageManger
负责处理和协调 SDWebImageDownloader
和 SDWebImageCache
:SDWebImageDownloader
负责具体的下载任务,SDWebImageCache
负责关于缓存的工作:添加,删除,查询缓存。
首先我们大致看一下这个框架的调用流程图:
从这个流程图里可以大致看出,该框架分为两个层:UIKit层(负责接收下载参数)和工具层(负责下载操作和缓存)。
OK~基本流程大概清楚了,我们看一下每个层具体实现吧~