加载图片流程
- 最基本的调用
- 最终的实现方法
- sd_internalSetImageWithURL
- 1.判断当前是否有正在进行的任务
- 2.更新占位图片
- 2.1判断是否在主队列中中执行,主队列一定是主线程执行
- 3.加载图片
- 3.1查找缓存 分为
- 内存缓存(Memory:NSCache)UIImage
- URL<->Image,如果URL不变,图片资源变了怎么处理
- 磁盘缓存 二进制(文件)
- NSURLCache:当前的HTTP缓存,不同的缓存策略。
- 内存缓存(Memory:NSCache)UIImage
- 3.2网络请求(NSURLSession)
- 下载:缓存策略设置
- 3.3 图片解码
- 4.图片的获取,真正的完成重点
- 5.下载完成之后做什么
- 1.自己处理图片
- 2.placehodel需要延迟设置
下载模块的实现
- 下载任务创建
- 图片下载模块
-
进入缓存查找
-
检测是否需要进入缓存查找
-
key-根据当前的URL获取
-
缓存策略的获取及真的的获取缓存图片方法
-
校验内存缓存
-
NSOperation
缓存模块的实现
-
内存缓存
- NSCache
- 好用的线程安全的类似字典NSDictionary的数据结构,里面有加锁机制
- countLimit:最大缓存数
- 系统自动处理回收
- 1.缓存对象自身被释放
- 2.手动调用API
- 3.countLimit/缓存数> countLimit
- 4.程序进入后台
- 5.收到系统的内存警告
- 监听内存警告
- 里面缓存的是UIImage
- NSCache
-
查询磁盘缓存任务
-
串行队列保证磁盘的读写只有一个任务执行。
-
@autoreleasepool 自动释放池保证了查询磁盘过程中生成的大量临时变量,在方法调用完毕之后能自动释放。
-
以文件的形式查找缓存 二进制->NSData
-
NSData->Image 解码只发生在内存缓存丢失的情况下。
-
图片解码
-
data->SDImageFormat 返回图片的加载格式。
- 当读取磁盘图片和图片格式设置完成后,缓存图片设置内存缓存 cost图片内存大小。
总结
- 1.作用:
- SDWebImageView的功能很强大,其中UIImageView+WebCach.h的功能主要是下载图片,设置图片缓存.
- 2.原理:
- 下载图片的原理:通过图片的网站地址URL异步下载图片;
- 缓存图片的原理:下载完成的图片会被保存的内存和文件中;加载图片的时候首先会到内存中去找图片,如果没有就到文件中找,再没有才下载图片。
大佬文章