SDWebImage的实现原理

一、SDWebImage库的作用:

它主要是通过对UIImageView的类别(分类)扩展来实现异步加载替换图片的工作。

二、主要用到的对象:

1、UIImageView + WebCache :入口封装,实现读取图片完成后的回调工作;

2、SDWebImageManager:

  • 记录那些图片正在读取,对图片进行管理的中转站;
  • 调用SDImageCache向下层读取Cache,调用SDWebImageDownloader向网络读取对象;
  • 实现SDImageCache 和 SDWebImageDownloader的回调。

3、SDImageCache: 根据URL的MD5摘要对图片进行存储和读取 (实现存在内存中或者存在硬盘上)实现图片和内存清理工作。

  • SDImageCache分两个部分,一个是内存层面的,一个是硬盘层面的。
  • 内存层面:相当是个缓存器,以Key-Value的形式存储图片。当内存不够的时候会清除所有缓存图片。用搜索文件系统的方式做管理,文件替换方式是以时间为单位,剔除时间大于一周的图片文件。
  • 当SDWebImageManager向SDImageCache要资源时,先搜索内存层面的数据,如果有直接返回,没有的话去访问磁盘,将图片从磁盘读取出来,然后做Decoder,将图片对象放到内存层面做备份,再返回调用层。

4、SDWebImageDownloader:根据URL向网路读取数据(实现部分读取和全部读取后再通知回调两种方式)。

5、SDWebImageDecoder: 对图片进行异步解压操作。

  • 由于UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像,所以在每次画图的时候,会有一个解压操作,这样效率很低,但是只有瞬时的内存需求。为了提高效率通过SDWebImageDecoder将包装在Data下的资源解压,然后画在另外一张图片上,这样这张新图片就不再需要重复解压了。这种做法是典型的空间换时间的做法。
时间: 2024-08-25 13:10:48

SDWebImage的实现原理的相关文章

SDWebImage的实现原理(UIImageView+WebCach)

1.作用: SDWebImageView的功能很强大,其中UIImageView+WebCach.h的功能主要是下载图片,设置图片缓存. 2.原理: 下载图片的原理:通过图片的网站地址URL异步下载图片: 缓存图片的原理:下载完成的图片会被保存的内存和文件中:加载图片的时候首先会到内存中去找图片,如果没有就到文件中找,再没有才下载图片. 3.用法: 导入第三方库SDWebImage 头文件:UIImageView+webCache.h 主要语句: [cell.posterImage sd_set

SDWebImage底层实现原理

SDWebImage底层实现有沙盒缓存机制,主要由三块组成 1.内存图片缓存2.内存操作缓存3.磁盘沙盒缓存 内部实现过程:第一步,下载SDWebImage,导入工程. 第二步,在需要的地方导入头文件 1 #import "UIImageView+WebCache.h" 第三步,调用sd_setImageWithURL:方法缓存图片,注意,这就是新版本的新方法,旧方法是setImageWithURL:.下面将几个方法都介绍一下. 1. sd_setImageWithURL: 1 //图

转 SDWebImage使用及原理

SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. 使用示范的代码: UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category) 前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellFo

IOS SDWebImage实现原理详解

在之前我写过SDWebImage的使用方法,主要是用与获取网络图片,没有看过的朋友可以看看. 这篇文章将主要介绍SDWebImage的实现原理,主要针对于获取网络图片的原理,如果没有第三方我们该怎么去做,当然我知识用文字去介绍,我想花大把的时间去深入理解我们用不到的东西,是很不值得的,不过兴趣的朋友可以去其他博客上查找相应信息,毕竟学无止境.好了下面开始进入正题. 1)当我门需要获取网络图片的时候,我们首先需要的便是URl没有URl什么都没有,获得URL后我们SDWebImage实现的并不是直接

iOS利用SDWebImage图片下载缓存

一.我们先来了解一下SDWebImage的使用: 1.导入框架,引入头文件: #import "UIImageView+WebCache.h" 也可以直接使用CocoaPods来引入和管理 (OC 如下) platform :ios, '7.0' pod 'SDWebImage', '~>3.8' (swift)并且要确保添加了use_frameworks,iOS版本为8.0+ platform :ios, '8.0' use_frameworks! 2.图片下载并缓存方法: /

SDWebImage源码解析之SDWebImageManager的注解

http://www.cocoachina.com/ios/20150612/12118.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

开源框架:SDWebImage

http://blog.csdn.net/uxyheaven/article/details/7909373 SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒! 这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存. 我们如果能够熟练使用其API 就可以实现很多复杂的需求了. 作者依旧在更新,目前3.0 版本已经非常强大! 简化了更多API接口.加强了下载类,支持多个文件同时下载,内置了下载进度功能.等 github托管地址如下: https://githu

SDWebImage异步下载和缓存的源码剖析

前言: 在移动app开发过程中,考虑到手机流量.网速以及内存等因素,当我们的app需要频繁的访问网络时,对网络优化这块的要求就显得尤为重要. 比如某个app需要经常重复显示很多张网络图片的时候,如果在每次需要显示同一张网络图片,都要访问网络进行下载操作,那就显得很不合理了. 因为那样会相当耗时,且耗流量.这就需要对已下载好的网络图片进行缓存操作. 我目前开发的一个项目属于展示类app,一个需要频繁处理网络图片的应用,涉及复杂的异步下载和异步缓存等处理. 在使用SDWebImage类库进行网络图片

iOS多线程编程

1. 进程,线程, 任务 进程:一个程序在运行时,系统会为其分配一个进程,用以管理他的一些资源. 线程:进程内所包含的一个或多个执行单元称为线程,线程一般情况下不持有资源,但可以使用其所在进程的资源. 任务:进程或线程中要做的事情. 在引入线程的操作系统中,通常把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位. 线程比进程更小,对其调度的开销小,能够提高系统内多个任务的并发执行程度. 一个程序至少有一个进程,一个进程至少有一个线程.一个程序就是一个进程,而一个程序中的多个任