SDWebImage

下载过程:

SDWebImageManager:从缓存加载图片(缓存包括内存缓存和磁盘缓存)

SDImageCache:从缓存加载图片用到的一个类,所有的缓存操作都是它来执行的

如果缓存中没有图片,在它的回调函数里去创建 SDWebImageDownloader,它并没有真正的去执行下载操作,只是去设置下载操作,比如说超时多长时间就不下载了、还有一些请求操作,真正的下载操作是SDWebImageDownloader去调用SDWebImageDownloaderOperation

clearDisk (NSCache)清空磁盘缓存,将所有缓存目录中的文件,全部删除! 实际工作,将缓存目录直接删除,再次创建一个同名空目录!

cleanDisk (接收到应用程序将要终止通知)清理磁盘缓存策略

cleanDisk执行过程:

获取磁盘路径URL,根据路径获取资源(存入NSArray)

定义一个可变字典,记录所有缓存文件

定义一个可变数组,遍历资源,将过期文件记录到可变数组里边,累加文件的总大小,然后遍历过期文件数组删除过期文件

如果剩余磁盘缓存空间超出最大限额,再次执行清理操作,删除最早的文件 循环依次删除文件,直到低于期望的缓存限额,SDWebimage里边的期望限额为最大限额的一半

内存缓存是使用NSCache实现的,最大内存缓存值以像素为单位

最大磁盘缓存是以字节为单位,最大磁盘缓存的时间默认为1周

下载操作的最大并发数默认为6

下载操作的超时时长最长默认为15秒

SDWebImage是如何区分不同格式的图像的(精确判断文件类型):

#import "NSData+ImageContentType.h"

拿到文件的二进制数据,取出第一个字节和switch里的分支比较来判断

PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式!

JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好!

GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的!

SDWebImage缓存图片的名称是用URL的md5加密后生成的32位字符串作为文件名的

 

利用通知中心观察,能够保证缓存文件的大小始终在控制范围之内!

- UIApplicationDidReceiveMemoryWarningNotification 接收到内存警告的通知

执行 clearMemory 方法,清理内存缓存!

- UIApplicationWillTerminateNotification 接收到应用程序将要终止通知

执行 cleanDisk 方法,清理磁盘缓存!

- UIApplicationDidEnterBackgroundNotification 接收到应用程序进入后台通知

执行 backgroundCleanDisk 方法,后台清理磁盘!

 

内存缓存: 使用NSCahce对象实现

磁盘缓存: 使用 NSFileManager 存储在 Cache 目录中

SDImageCache提供了大量方法来缓存、获取、移除及清空图片。为了方便地在内存或磁盘中对它进行这些操作,

我们需要为每个图片设置一个key来索引它。在内存中将其作为NSCache的key值,在磁盘中用这key的md5作为图片的文件名。

在SDWebImage 中使用图片的 url 最为 key (md5)

 

posted @ 2015-06-28 00:39  城里城外  阅读(499)  评论(0编辑  收藏  举报