原文请参考:https://www.jianshu.com/p/9d114a82f77b
参照SDWebImage做,主要考虑以下几点
- Manager
- Cache :内存缓存、磁盘缓存
- downloader网络下载
- 封装视图Category
- 图片解码、解压缩
在图片的存储是以图片的单向 hash 值为 Key
1.Manager
Manager用于管理downloader
和Cache
,设置options
参数,让用户设置缓存策略
- 下载失败重试
- 只用磁盘数据
- 不用缓存数据等等
2.内存缓存
内存中缓存的数据,需要考虑存储的size,针对不同尺寸的图片,给出不同的方案
- 10K 以下的50个
- 100Kb 以下的20个
- 100kb 以上的10个
内存的淘汰策略 采取 LRU(最近最少使用算法)
触发淘汰策略的时机:
- 定期检查(不建议,消耗性能)
- 提高触发频率:1.前后台切换的时候 2.每次读写的时候
3.磁盘缓存
磁盘缓存需要考虑的问题如下
- 存储方式
- 大小限制
- 移除策略(可以设置为7天)
4.网络下载
- 图片请求的最大并发量
- 请求超时策略
- 请求优先级
5.图片解码解压缩
针对jpg、png、gif等不同的图片格式进行解码
解码调用时机
- 子线程图片下载完成时
- 子线程刚从磁盘读取完成时
避免在主线程中解压缩、解码,避免卡顿
6.封装视图Category
基于Manager
封装响应控件的Category
- (void)sd_setImageWithURL:(nullable NSURL *)url
placeholderImage:(nullable UIImage *)placeholder
options:(SDWebImageOptions)options
progress:(nullable SDImageLoaderProgressBlock)progressBlock
completed:(nullable SDExternalCompletionBlock)completedBlock;
网友评论