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

原文请参考: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;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容