iOS 开发之 SDWebImage 底层实现原理分析
SDWebImage 是一个比较流行的用于网络图片缓存的第三方类库。这个类库提供了一个支持缓存的图片下载器。为了方便操作者调用,它提供了很多 UI 组件的类别,例如:UIImageView、UIButton、等等。
使用方式很简单:
1、CocoaPods 安装:
platform :ios, '7.0'
pod 'SDWebImage', '~> 4.0'
2、直接把文件夹拖进工程目录:
在使用时只需要引入头文件,就可以使用相关 API 进行网路图片缓存了。例如:
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
工程目录如下:
SDWebImage
|—-SDWebImageCompat 处理不同平台(iOS、TV、OS、Watch)宏,以及根据文件名@2x、@3x进行图片处理和缩放
|—-SDWebImageOperation.h 添加cancel的delegate
+—-Cache
|——–SDImageCache 主要处理缓存逻辑,重点集中在:NSCache(Memory)、Disk读写、清理Old File
|——–SDImageCacheConfig 配置缓存参数:是否压缩、iCloud、InMemory、ReadingOption、时间和CacheSize
+—-Downloader
|——–SDWebImageDownloaderOperation 主要提供下载的Operation操作
|——–SDWebImageDownloader 提供下载管理入口
+—-Utils
|——–SDWebImageManager 提供外层管理cache和download入口
|——–SDWebImagePrefetcher 预处理获取Image,主要应用预加载的地方
+—-Categories
|——–NSData+ImageContentType 提供类型判断和ImageIO类型转换
|——–UIImage+GIF Data转UIImage(GIF)扩展
|——–UIImage+MultiFormat 提供BitMap或者未知类型的Data转UIImage扩展
|——–UIImage+WebP Data转WebP扩展
|——–UIImage+ForceDecode 解压操作
|——–UIView+WebCacheOperation 提供顶层关于取消和下载记录的扩展
+—-Decoder
|——–SDWebImageCodersManager 整体Coders的入口,提供是否可Coder和Coder转发
|——–SDWebImageCoder 主要说明Coder Delegate 需要实现的接口
|——–SDWebImageImageIOCoder PNG/JPEG的Encode和解压操作
|——–SDWebImageGIFCoder GIF的Coder操作
|——–SDWebImageWebPCoder WebP的Coder操作
|——–SDWebImageFrame 辅助类,主要在GIF等动态图使用
|——–SDWebImageCoderHelper 辅助类,包括方向、Gif图合成等
组件结构图(来自网络):

SDWebImage 工程架构UML图如下:


iOS 开发之 SDWebImage 底层实现原理分析的更多相关文章
- iOS开发之SDWebImage详解
介绍 github地址: https://github.com/rs/SDWebImage 简介 一个异步图片下载及缓存的库 特性: 一个扩展UIImageView分类的库,支持加载网络图片并缓存图片 ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- 插件开发之360 DroidPlugin源码分析(五)Service预注册占坑
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52264977 在了解系统的activity,service,broa ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- 李洪强IOS开发之iOS好项目收集
李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...
随机推荐
- Oracle用户权限授权以及索引、同义词、分区
本文为原创,如需转载,请标明出处 http://www.cnblogs.com/gudu1/p/7601765.html ---- 用户权限 1.创建表空间 (创建用户之前需要创建表空间和临时表空间, ...
- 安卓模拟器genymotion 安装使用
下载:https://www.genymotion.com/download/ 安装前先注册: https://www.runoob.com/w3cnote/android-tutorial-geny ...
- 第三篇,ajax 和 axios、fetch的区别
1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...
- 随缘记录 LeetCode第168场周赛 2019-12-22
5292. 划分数组为连续数字的集合 给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合. 如果可以,请返回 True:否则,返回 Fals ...
- 大数据-Storm
Storm 流式处理框架 Storm是实时的,分布式,高容错的计算系统.java+cljoure Storm常驻内存,数据在内存中处理不经过磁盘,数据通过网络传输. 底层java+cljoure构成, ...
- (GHRD)HPS
DE1作为ARM+FPGA的组合,ARM和FPGA之间通信,两个区块间有三个通道可以让两部分实现传输数据,统称为 HPS-FPGA AXI Bridges. 分别为:FPGA-to-HPS Bridg ...
- 为什么html表单用post提交后,提交页面是空白
为什么html表单用post提交后,提交页面是空白? 因为post提交就应该用doPost()方法处理数据
- B/S架构和C/S的区别
经常在招聘网站上看到要求熟悉B/S C/S架构,具体含义是: B/S---Browser/Server 浏览器/服务器模式 C/S---Client/Server 客户端/服务器模式 通俗点讲: ...
- 查看Oracle的SID的方式
1 使用组合键“Win + R”打开运行对话框,在输入框中输入 regedit 并回车打开“注册表编辑器”. 2 在“注册表编辑器”对话框,依次展开 HKEY_LOCAL_MACHINE\SOF ...
- css的理解 ----footrt固定在底部
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...