SDWebImage源码解读

以前只知道如何使用,现在我想进阶一下知道他的原理,要知其然,更要知其所以然。

SDWebimage实现简单的步骤如下:

1.在显示图片之前,先检查内存缓存中时候有该图片;

2.如果内存缓存中有图片,那么就直接使用,不下载;

3.如果内存缓存中无图片,那么再检查是否有磁盘缓存;

4.如果磁盘缓存中有图片,那么直接使用,还需要保存一份到内存缓存中(方便下一次使用);

5.如果磁盘缓存中无图片,那么再去下载,并且把下载完的图片保存到内存缓存与磁盘缓存中。


根据我们的步骤,跳进SDWebimage的源码看看,我们调用的是如下这个方法:

[self.imageView sd_setImageWithURL:[NSURL URLWithString:model.thumb_url?:@""] placeholderImage:[UIImage imageNamed:@""]];复制代码

一步步进入到如下方法中:


通过下图我们可以清楚的看到:第一步判断的是图片是否存在,初始化SDWebImageManager


再判断SDImageCache中是否存在图片,如果存在则调用sdImageCacheDelegate返回到前端显示;如果没有在SDImageCache中找到图片,则生成NSInvocationOperation添加到队列中,在磁盘中查找,找到则回调;没找到,则共享或生成下载器SDWebImageDownLoader开始下载图片,由NSURLConnection来执行,下载完毕后图片解码在NSOperationQueue中执行,在notifyDelegateOnMainThreadWithInfo中告诉解码完成


progressblock中也可以看到下载的进度,



在这里显示进度和是否下载完毕:

通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。

图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。

看完之后真是膜拜大神,这只是简单的实现过程,还没有查看各个分类具体的操作。以后有时间在,好好研究一下各个分类的处理。在看其他博客的时候,看到一个流程解释很全面的图,附上:


SDWebImage还有很多值得我们借鉴和学习的地方,需要大家细细研读,更深层次的学习它内部处理的思路。以后自己理解深入了,再做一些详细的介绍。


转载于:https://juejin.im/post/5cc15fd15188252da9453a3c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值