读SDWebImage源码笔记

本文详细介绍了SDWebImage的图片下载和缓存机制,包括二级缓存策略、下载过程以及内存和磁盘缓存的清理策略。在下载过程中,SDWebImage先检查内存缓存,接着查找硬盘缓存,若无则下载,下载完成后更新缓存并显示图片。缓存清理策略包括在内存不足、程序后台运行及关闭时进行清理。
摘要由CSDN通过智能技术生成
  1. SDWebImage最大并发个数:6。
  2. 默认下载超时时间 :15s。
  3. 默认缓存时间: 一周。

 

1、SDWebImage 下载过程 【其中包括 SDWebImage 缓存策略(二级缓存策略)】

imageView sd_setImageWithUrl:placeholder:options:context:progress{}completed{}

最外层是一个SDWebImageManager单例,管理着另外两个单例,一个是下载的SDWebImageDownloader,它管理着多个下载操作的operation。另一个是缓存处理的SDImageCache。具体过程:

1、在每次下载图片的时候,先根据imageview的operationDictionary有没有相同的key,如果有就将key对应的Operation取消并删除。

2、将新的任务添加到operation字典中,加载完图片后会根据operation在与不在判断是否显示,如果有就显示并移除operation。这是SD的避免复用的方法。

3、然后会异步到主线程设置图片为placeholder,设置placehoder图片不缓存。

4、判断url存在,那么调用SDWebImageManager的loadWithUrl:函数内部通过SDImageCache来从缓存中根据CacheKey也就是下载用的url转MD5作为key来查看图片是否已经在缓存中。

5、如果图片在内存中有缓存,那么就回调给Manager,显示图片。

6、如果图片在内存中没有,那么就生成从硬盘中查找图片是否存在,如果存在就加载到内存,如果内存小就先清内存再存缓存,读取后回调显示图片。

7、如果硬盘中也读取不到图片,就说明需要下载图片。然后,通过SDWebImageLoader来下载图片。

9、图片下载由NSUrlConnection来做,监测图片的下载进度

10、在didFinishLoading回调方法中,将图片处理,并转主线程展示图片

11、然后将图片保存在SDImageCache中,内存缓存和硬盘保存。

 

2、SDWebImage图片缓存清理策略

1、获取磁盘中图片最后的修改日期,读取文件的属性如最后修改日期、大小以及文件的路径。

2、根据最后修改日期对图片进行分类,将那些已经超过最长存放时间的文件存储在删除数组,其他的文件存另一个字典。计算删除掉要删除的文件后的大小

3、根据文件路径将对应的文件删除

4、判断剩下的文件大小是否还是超过用户现在磁盘的最大容量

5、如果超过就将剩余的文件进行修改时间排序,删除修改时间最早的文件,直到剩余文件大小小于maxCacheSize。

 

3、缓存清理时机

1、在系统发出内存不足通知时,会将内存中的所有图片缓存删除

2、程序进入后台时,会对磁盘文件数据进行清理

3、当收到程序关闭通知时,对磁盘的文件数据进行清理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值