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[https://github.com/rs/SDWebImage] 分析 Version 4...
    wyanassert阅读 1,995评论 0 8
  • SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类...
    XLsn0w阅读 769评论 0 0
  • 下载 下载管理器 SDWebImageDownLoader作为一个单例来管理图片的下载操作。图片的下载是放在一个N...
    wind_dy阅读 1,585评论 0 1
  • 项目中一直都有使用SDWebImage,对这个框架有一定的了解,但是体系却未能贯通,因此特地整理下,主要参考: i...
    林大鹏阅读 1,555评论 2 13
  • 前不久做了一个生成快照的需求,其中用到 SDWebImage 来下载图片,在使用该框架的过程中也遇到了一些问题,索...
    ShannonChenCHN阅读 14,188评论 12 241