[IOS] SDWebImage 实现原理

一、SDWebImage 实现原理:

首先让占位图先显示。

SDWebImageManage交给 SDImageCache 先从内存中查找是否有图片,会以URL作为数据的索引在内存中查找是否有对应的缓存。

如果有缓存,通过代理进行回调展示图片。

如果内存缓存中没有找到,生成 NSInvocationOperation 添加到队列,会通过MD5处理过的key来硬盘中查询是否有图片。

如果找到了,就把硬盘中的数据加载到内存中并显示。

如果没有找到,会生成一个下载器向远程服务器发出请求开始下载图片。

图片下载由NSURLConnection 来做,实现相关delegate来判断图片下载中、下载完成和下载失败。

下载后的图片会被保存到内存和硬盘。

进行界面展示。

二、SDWebImageDownloader.m中的init方法

_downloadQueue.maxConcurrentOperationCount = 6;

三. SDWebImage支持gif么?

支持。UIImage+GIF

四、SDWebImage中怎么判断文件的类型的

在NSData+ImageContentType.m中

根据文件头的第一个字节判断的 ——>将图片放到Bundle中—> Open As—> HEX

case 0xFF:

return @"image/jpeg";

case 0x89:

return @"image/png";

case 0x47:

return @"image/gif";

case 0x49:

case 0x4D:

return @"image/tiff";

五、SDWebImage缓存文件名称

为了防止缓存的图片名称冲突,根据md5计算的

六、SD默认超时时间是15s

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前面试有人问到过,你用到的图片缓存SDWebImage 的实现原理,感觉自己回答得不够系统,现在总结一下,以后再...
    春鹏阅读 552评论 0 0
  • 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次...
    老韩在简书阅读 762评论 0 6
  • 在之前我写过SDWebImage的使用方法,主要是用与获取网络图片,没有看过的朋友可以看看。 这篇文章将主要介绍S...
    一等到天幻阅读 364评论 0 1
  • 下载 下载管理器 SDWebImageDownLoader作为一个单例来管理图片的下载操作。图片的下载是放在一个N...
    wind_dy阅读 1,586评论 0 1
  • SDWebImage[https://github.com/rs/SDWebImage] 分析 Version 4...
    wyanassert阅读 1,995评论 0 8