SDWebImage详解
作者:互联网
简介
SDWebImage提供的简洁的获取远程URL图片的API;平时开发中使用最多场景就是列表中的cell中要显示远程图片的需求,在具体的实现中要避免加载图片造成的界面卡顿,列表卡顿等现象的出现;所以需要编码实现如下功能:
- 使用占位图片显示UI界面,异步线程加载图片成功后刷新控件
- 缓存机制,下载过的图片做内存缓存和磁盘缓存
- app内存吃紧的状态下移除缓存的内容
SDWebImage的图片下载分类,只要一行代码就可以实现图片异步下载和缓存功能。
功能简介
- 一个添加了web图片加载和缓存管理的UIImageView分类
- 一个异步图片下载器
- 一个异步的内存加磁盘综合存储图片并且自动处理过期图片
- 支持动态gif图
- 4.0 之前的动图效果并不是太好
- 4.0 以后基于 FLAnimatedImage加载动图
- 支持webP格式的图片
- 后台图片解压处理
- 确保同样的图片url不会下载多次
- 确保伪造的图片url不会重复尝试下载
- 确保主线程不会阻塞
实现原理
1、流程图
常见面试题
-
图片文件缓存的时间有多长:1周
_maxCacheAge = kDefaultCacheMaxCacheAge -
SDWebImage 的内存缓存是用什么实现的?
NSCache -
SDWebImage 的最大并发数是多少?
maxConcurrentDownloads = 6
是程序固定死了,可以通过属性进行调整! -
SDWebImage 支持动图吗?GIF
#import <ImageIO/ImageIO.h>
[UIImage animatedImageWithImages:images duration:duration]; -
SDWebImage是如何区分不同格式的图像的
根据图像数据第一个字节来判断的!
PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式!
JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好!
GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的! -
SDWebImage 缓存图片的名称是怎么确定的!
md5
如果单纯使用 文件名保存,重名的几率很高!
使用 MD5 的散列函数!对完整的 URL 进行 md5,结果是一个 32 个字符长度的字符串! -
SDWebImage 的内存警告是如何处理的!
利用通知中心观察- UIApplicationDidReceiveMemoryWarningNotification 接收到内存警告的通知
执行 clearMemory 方法,清理内存缓存! - UIApplicationWillTerminateNotification 接收到应用程序将要终止通知
执行 cleanDisk 方法,清理磁盘缓存! - UIApplicationDidEnterBackgroundNotification 接收到应用程序进入后台通知
执行 backgroundCleanDisk 方法,后台清理磁盘!
通过以上通知监听,能够保证缓存文件的大小始终在控制范围之内!
clearDisk 清空磁盘缓存,将所有缓存目录中的文件,全部删除!
- UIApplicationDidReceiveMemoryWarningNotification 接收到内存警告的通知
实际工作,将缓存目录直接删除,再次创建一个同名空目录!
标签:异步,缓存,详解,内存,磁盘,SDWebImage,图片 来源: https://blog.csdn.net/weixin_44836266/article/details/122216889