美文网首页
iOS开发 如何做一个图片缓存框架

iOS开发 如何做一个图片缓存框架

作者: 喜剧收尾_XWX | 来源:发表于2020-12-14 19:33 被阅读0次

原文请参考:https://www.jianshu.com/p/9d114a82f77b


参照SDWebImage做,主要考虑以下几点

  • Manager
  • Cache :内存缓存、磁盘缓存
  • downloader网络下载
  • 封装视图Category
  • 图片解码、解压缩

在图片的存储是以图片的单向 hash 值为 Key

1.Manager

Manager用于管理downloaderCache,设置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;

相关文章

网友评论

      本文标题:iOS开发 如何做一个图片缓存框架

      本文链接:https://www.haomeiwen.com/subject/gzcbgktx.html