图片下载库原理:即SDWebImage原理
下载图片模块使用操作和操作队列来完成,存入内存和沙盒。第二次使用时先从内存中找,如果内存中没有从沙盒中找,如果沙盒中存在就使用并且在内存中存一份,方便下次使用
主要有几个部分:下载操作类、管理类、存储类、以及类别
需求:
下载网络上的图片
缓存 内存缓存 硬盘缓存 管理缓存(获取缓存大小 删除过期缓存等等)
图片下载结构分析:
图片下载管理类
- 创建下载管理类SQImageManager 继承于NSObject
- 单例类
- 重写初始化方法 初始化属性 queue 初始化缓存
- 下载图片方法 传入URL和完成block
- 添加监听,出现内存警告时,删除内存缓存
图片下载类
- 新建下载类SQImageOperation继承于NSOperation
- 重写start下载图片
- 声明自定义初始化方法 传入URL和完成block
相对应的类别
- 创建类别 声明方法
- -(void)downloadImageWithURL:(NSString )urlStr placeHolderImage:(UIImage )image;
实现 先将占位图赋值给image 然后使用SQImageManager下载图片 在完成block中更新UI
创建缓存类是 SQImageCache
- 单例类
- 重写初始化方法 初始化缓存
- 初始化内存缓存 即创建字典
- 初始化硬盘缓存 创建硬盘上存图片的文件夹
- 根据key保存data到内存
- 根据key从内存中取data
- 根据key保存data到硬盘
- 根据key从硬盘中取data
- 清理内存
- 清理硬盘
- 获取硬盘缓存大小(此时计算文件时 计算文件夹无效 必须计算每个文件的大小)