SDWebImage库结构的简单分析
来源:互联网 发布:用python写网络爬虫 编辑:程序博客网 时间:2024/05/17 12:51
转自:http://www.cnblogs.com/biosli/archive/2012/07/21/2602624.html
SDWebImage库的作用:
通过对UIImageView的类别扩展来实现异步加载替换图片的工作。
主要用到的对象:
1、UIImageView (WebCache)类别,入口封装,实现读取图片完成后的回调
2、SDWebImageManager,对图片进行管理的中转站,记录那些图片正在读取。
向下层读取Cache(调用SDImageCache),或者向网络读取对象(调用SDWebImageDownloader) 。
实现SDImageCache和SDWebImageDownloader的回调。
3、SDImageCache,根据URL的MD5摘要对图片进行存储和读取(实现存在内存中或者存在硬盘上两种实现)
实现图片和内存清理工作。
4、SDWebImageDownloader,根据URL向网络读取数据(实现部分读取和全部读取后再通知回调两种方式)
其他类:
SDWebImageDecoder,异步对图像进行了一次解压⋯⋯
目前不明白为什么要做这么道工序。(现在清楚了,功能解释见下文)
有趣的点:
1、SDImageCache是怎么做数据管理的?
SDImageCache分两个部分,一个是内存层面的,一个是硬盘层面的。
内存层面的相当是个缓存器,以Key-Value的形式存储图片。当内存不够的时候会清除所有缓存图片。
用搜索文件系统的方式做管理,文件替换方式是以时间为单位,剔除时间大于一周的图片文件。
当SDWebImageManager向SDImageCache要资源时,先搜索内存层面的数据,如果有直接返回,没有的话去访问磁盘,将图片从磁盘读取出来,然后做Decoder,将图片对象放到内存层面做备份,再返回调用层。
2、为啥必须做Decoder?
通过这个博客:http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
现在明白了,由于UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像,
所以在每次画图的时候,会有一个解压操作,这样效率很低,但是只有瞬时的内存需求。
为了提高效率通过SDWebImageDecoder将包装在Data下的资源解压,然后画在另外一张图片上,这样这张新图片就不再需要重复解压了。
这种做法是典型的空间换时间的做法。
0 0
- SDWebImage库结构的简单分析 SDWebImage库的作用
- SDWebImage库结构的简单分析
- SDWebImage的简单使用
- SDWebImage的简单使用
- SDWebImage的简单使用
- SDWebImage的简单使用
- 对SDWebImage的浅分析
- 对SDWebImage的浅分析
- 简单分析YYWebImage 是如何判断图片格式的原理 (附上SDWebImage)
- SDWebImage库的理解
- 一、SDWebImage分析--库处理流程分析
- 37.第三方(SDWebImage)的简单应用
- 开源框架:SDWebImage的简单使用
- SDWebImage 中简单的清除缓存
- 一个简单PDF文件的结构分析
- 一个简单PDF文件的结构分析
- 一个简单PDF文件的结构分析
- JAVA常用容器结构的简单分析
- VS调试Dll小小经验
- Android笔记Fragment与Activity之间传递数据
- Bug 355012 - "org.eclipse.wst.validation" has been removed
- centos 网卡错误 Device eth0 does not seem to
- Postgresql 数据在一张表中存在,另一张表不满足完整性的查找
- SDWebImage库结构的简单分析
- 网络基础学习笔记
- 黑马程序员——高新技术---内省、注解、类加载器--(冲刺复习知识补充)
- 一个简单的高并发的回应服务器(5万并发)
- erlang list模块函数
- 线程同步wait notify小例子
- Another MySQL daemon already running with the same unix socket
- Div+css 浮动与定位
- Android 自定义布局 性能问题 初探