前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SDWebImage源码解读(一)

SDWebImage源码解读(一)

作者头像
honey缘木鱼
发布2018-08-02 15:13:17
6240
发布2018-08-02 15:13:17
举报
文章被收录于专栏:娱乐心理测试娱乐心理测试

SDWebImage 是目前最流行、使用最广泛的第三方图片处理框架,它不仅能够异步加载网络图片,还提供了一套图片缓存管理机制(内存缓存+磁盘缓存),功能非常强大。

SD内部已经帮我们把请求回来的数据或者缓存到本地的图片资源都进行了异步解压缩,因此不需要我们来做。 图片压缩流程:

代码语言:javascript
复制
假设我们使用 +imageWithContentsOfFile: 方法从磁盘中加载一张图片,这个时候的图片并没有解压缩;
然后将生成的 UIImage 赋值给 UIImageView ;
接着一个隐式的 CATransaction 捕获到了 UIImageView 图层树的变化;
在主线程的下一个 run loop 到来时,Core Animation 提交了这个隐式的 transaction ,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤:
分配内存缓冲区用于管理文件 IO 和解压缩操作;
将文件数据从磁盘读到内存中;
将压缩的图片数据解码成未压缩的位图形式,这是一个非常耗时的 CPU 操作;
最后 Core Animation 使用未压缩的位图数据渲染 UIImageView 的图层。

解压缩是一个非常耗时的 CPU 操作,并且它默认是在主线程中执行的。那么当需要加载的图片比较多时,就会对我们应用的响应性造成严重的影响,尤其是在快速滑动的列表上,就会特别的卡顿。为什么要解压呢?因为当你进行图片渲染的时候,必须得到解压缩后的原始像素数据,才能进行图形渲染,这就是解压缩的原因。SD在SDWebImageDecoder这个文件中进行了强制解压缩,我们赋值给imageView的时候已经是解压缩的文件了,因此不会卡主主线程,不然默认是在主线程进行解压缩,图片一多,卡爆了。

1.SD的所有类的作用简单介绍

代码语言:javascript
复制
NSData+ImageContentType  通过Image data判断当前图片的格式

SDImageCache  缓存  定义了 Disk  和  memory二级缓存(NSCache)负责管理cache  单例

SDWebImageCompat  保证不同平台/版本/屏幕等兼容性的宏定义和内联 图片缩放

SDWebImageDecoder  图片解压缩,内部只有一个接口

SDWebImageDownloader 异步图片下载管理,管理下载队列,管理operation 管理网络请求 处理结果和异常  单例
存放网络请求回调的block  自己理解的数据结构大概是
//  结构{"url":[{"progress":"progressBlock"},{"complete":"completeBlock"}]}

SDWebImageDownloaderOperation 实现了异步下载图片的NSOperation,网络请求给予NSURLSession 代理下载
自定义的Operation任务对象,需要手动实现start cancel等方法

SDWebImageManager  核心管理类 主要对缓存管理 + 下载管理进行了封装  主要接口downloadImageWithURL单利

SDWebImageOperation   operation协议  只定义了cancel operation这一接口 上面的downloaderOperation的代理

SDWebImagePrefetcher 低优先级情况下预先下载图片,对SDWebImageViewManager进行简单封装 很少用

MKAnnotationView+WebCache – 为MKAnnotationView异步加载图片

UIButton+WebCache  为UIButton异步加载图片

UIImage+GIF  将Image data转换成指定格式图片

UIImage+MultiFormat 将image data转换成指定格式图片

UIImageView+HighlightedWebCache 为UIImageView异步加载图片

UIImageView+WebCache  为UIImageView异步加载图片

UIView+WebCacheOperation  保存当前MKAnnotationView / UIButton / UIImageView异步下载图片的operations

2.SD的所有类操作图

核心类的基本操作图

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档