SDWebImage的底层分析

一.主要功能类:

1.中心类SDWebImageManager , 负责调度图片的下载和缓存

2.SDImageCache                         负责内存缓存和硬盘缓存(沙盒缓存)

3.SDWebImageDownloader         负责图片的下载

�二.过程:  当调用sd_webImageWithURL:方法缓存图片,  SDWebImage库内部主要做了哪些事情呢?

1.寻找

首先SDImageCache类 

从缓存中查找图片是否存在,

如果内存中有图片缓存,则回调方法,展示

如果内存缓存中没有,生成NSInvocationOoperation添加到队列, 根据urlKey去硬盘中查找图片是否存在, 若从硬盘中读取到了图片, 则将图片添加到内存缓存中, 并回调方法,展示

如果硬盘中读取不到图片,回调方法, 生成一个下载器SDWebImageDownloader开始下载图片

2.下载

下载是通过NSURLSession完成, 实现delegate来判断图片下载中, 下载完成, 下载失败

下载中     :  显示图片下载进度的效果

 下载完成 : 交给SDWebImageDecoder 进行图片解码, 同样, 图片解码在一个NSOperationQueue中完成, 不会拖慢主线程UI

并回调给SDWebImageManager 告知图片下载完成, 并展示图片


3.保存

注意: 苹果提供给我们 NSCache类 进行内存缓存的管理,可以自己设置内存开销的限制

   图片会通过SDImageCache 同时保存到内存缓存和硬盘缓存. 写文件到硬盘缓存也是在NSInvocationOperation中完成, 避免拖慢主线程

并且, SDImageCache在初始化的时候, 注册了关于内存的通知, 在内存收到警告或退出后台的时候, 清理内存图片缓存, 应用结束时, 清理过期图片

你可能感兴趣的:(SDWebImage的底层分析)