2.01

2.01,第1张

文章目录 @[toc]0. 基本使用入口1. 取消已有的下载 *** 作2. 获取 SDWebImageManager 单例1. 缓存管理器 2. 下载管理器3. _failedURLs4. _runningOperations 3. 设置占位图4. 加载图片1.failedURLs2. operation3. 获取图片1. 缓存查找2. 去网络下载图片 5. 记录获取图片的 *** 作6. 显示图片


0. 基本使用


入口

sd_setImageWithURL 会进入 UIView的分类, 走sd_internalSetImageWithURL方法


1. 取消已有的下载 *** 作

获取一个字典(key(className) : value(operation,下载任务))
比如cell上的图片 : 因为cell都是复用的,所以滑动的时候钱一个图片还没有下载完,就开始了另一个图片的下载


2. 获取 SDWebImageManager 单例

每次都会获取一个 manager 单例 ,
manager 里都有什么?

manager里主要有四个东西
管理缓存的管理下载的无效图片地址的集合(防止无效的图片多次下载,浪费资源)下载任务的集合

1. 缓存管理器

单例 , 有些什么东西? _ioQueue :
_ioQueue = dispatch_queue_create("com.hackemist.SDImageCache", DISPATCH_QUEUE_SERIAL);

串行队列,负责IO流.

_config :
 config = SDImageCacheConfig.defaultCacheConfig;

也是一个单例, 设置了一些配置 , 比如图片在本地的最大存储时间,内存缓存类,磁盘缓存类

_memoryCache

内存缓存 : NSMapTable * weakCache ,用来做内存缓存,当收到内存警告的时候就会删除所有的

_diskCache

磁盘缓存 : 初始化了一个NSFileManager对象用来读写文件.
图片地址MD5后的结果为文件名,组成磁盘路径,判断磁盘中有没有这个图片,如果没有就写入这个文件

两个通知

当app即将结束,或者进入后台的时候,会遍历磁盘中的所有图片,把超过7天的文件删除


2. 下载管理器

单例 , 有些什么东西? _config

配置 : 最大下载量,下载超时时间15s

_downloadQueue

下载队列 , 最大并行数=6

_URLOperations

可变字典,用来装下载任务

_session

会话session : delegate = self
下载管理器会管理下载任务task的回调.


3. _failedURLs

无效的图片地址集合

_failedURLs = [NSMutableSet new];// 无效的图片地址 集合

4. _runningOperations

正在进行的下载任务集合

_runningOperations = [NSMutableSet new]; // 正在进行的下载任务集合

3. 设置占位图


4. 加载图片

从缓存中,或者下载,

1.failedURLs

看看url是否在无效的URL集合中,如果是,那么调用失败的回调


2. operation

创建一个operation,把这个operation放入manager的runningOperations中.
表示这个获取图片的任务正在执行


3. 获取图片

从缓存或者下载来获取图片

1. 缓存查找 内存中查找
_memoryCache 的weakCache中查找 , key(url) : value(图片image) , 如果找到了就返回图片
磁盘查找
通过_ioQueue串行队列,子线程查找磁盘文件,如果找到了,那么把data转换成image,添加到内存中

2. 去网络下载图片

创建下载任务

SDWebImageDownloaderOperation : 自定义的NSOperation, 重写了start方法 , weak引用了manager中的session
start方法中创建了下载图片的task.
然后添加operation到了downloadQueue中,执行start方法.开始下载任务

取消下载任务或移除下载任务

存储下载的图片

内存,磁盘存储图片


5. 记录获取图片的 *** 作

将步骤4得到的获取图片的operation将入字典,供步骤1如果复用了来取消获取图片的 *** 作


6. 显示图片

步骤4的回调

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/990183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存