美文网首页
SDWebImage源码学习

SDWebImage源码学习

作者: 藤王俊采 | 来源:发表于2019-10-10 17:35 被阅读0次

    以前对SDWebImage仅仅停留在使用的层面上,没有加以深入了解过。最近工作不是很忙。就对SDWebImage的源码研究学习了一下。感受颇深,尤其是它对整个第三框架的设计,功能划分十分清晰明了。感觉学到了很多东西。

    直接来看关键点吧

    SDWebImage 图片加载过程

    image

    从上图可以清晰的看到 SDWebImage的整个加载过程

    1 首先是外部对象调用sd_setImageWithURL()

    2 其内部多次调用后到调用UIView的sd_internalSetImageWithURL()方法。在这个方法内部 首先会去看当前view 是否有正在下载的任务 operation,如果有就取消掉。没有就先创建一个 SDWebImageManager,然后设置下载任务得到一个operation,并保存。

    3 SDWebImageManager 会调用其核心方法loadImageWithURL() 在这个方法内部首先会创建一个 SDWebImageCombinedOperation 任务并进行配置。首先会通过imageCache 调用queryDiskCacheForKey()查内存中是否有对应的url缓存,如果有就直接调返回。没有则通过异步再去查询磁盘上是否有。有的话就返回。如果没有则通过SDWebImageDownloader的downloadImage()方法去下载图片。待下载完成进行回调,回调到SDWebImageManager 则使用imageCache 对图片进行缓存操作。

    4 然后一步步回调回使用者

    接下来看一下 SDWebImage 架构组成

    image

    从上图可以看到它有四个核心模块

    Utils

    SDWebImageManager:实现图片的下载缓存管理,对外提供方法

    SDWebImagePrefetcher:实现图片的预加载

    SDWebImageTransition:实现图片加载完毕后的显示动画,支持扩展

    Download

    SDWebImageDownloader 下载模块 管理下载队列
    SDWebImageDownloaderOperation 管理具体的下载任务

    Cache

    SDImageCache 缓存的各种操作

    SDImageCacheConfig 缓存配置信息

    Coder

    各种解码

    SDWebImageCodersManager:图片编码中心,支持拓展

    SDWebImageCoder:图片编码协议集,自行拓展的分类必须支持此协议

    SDWebImageImageIOCoder:PNG、JPEG、TIFF图片的解码

    SDWebImageGIFCoder:GIF的解码

    SDWebImageWebPCoder:Webp的解码

    SDWebImageFrame:动图设置相关类组合

    SDWebImageCoderHelper:图片解码相关帮助方法

    SDAnimatedImageRep:NSBitmapImageRep的子类,加快NSBitmapImageRep的渲染

    总结:查看了源码可以在开发过程汇总更好的使用修改,补充一些东西为自己所用。最重要的感觉是其对整个框架的功能拆分,实现流程,任务记录,回调处理都值得学习借鉴

    相关文章

      网友评论

          本文标题:SDWebImage源码学习

          本文链接:https://www.haomeiwen.com/subject/xjpapctx.html