如何设计一个图片缓存框架?

如何设计一个图片缓存框架?
  • 可以模仿 SDWebImage 来实现。

  • 构成

  • Manager

  • 内存缓存

  • 磁盘缓存

  • 网络下载

  • Code Manager

图片解码

图片解压缩

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

内存设计需要考虑的问题
存储的 Size

因为内存的空间有限,我们针对不同尺寸的图片,给出不同的方案

  • 10K 以下的50个

  • 100Kb 以下的20个

  • 100kb 以上的10个

淘汰的策略

内存的淘汰策略 采取 LRU(最近最少使用算法)
触发淘汰策略的时机有三种

  • 1.定期检查(不建议,耗性能)

  • 2.提高检查触发频率(一定要注意开销)

  • 1.前后台切换的时候

  • 2.每次读写的时候

磁盘设计需要考虑的问题

存储方式
大小限制(有固定的大小)
移除策略(可以设置为7天或者15天)

  • 网络设计需要考虑的问题

图片请求的最大并发量
请求超时策略
请求优先级

图片解码
  • 应用 策略模式,针对 jpg、png、gif 等不同的图片格式进行解码

  • 图片解码的时机

  • 在 子线程 图片刚下载完时

  • 在 子线程 刚从磁盘读取完时

  • 避免在主线程解压缩、解码,避免卡顿

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

推荐阅读

iOS开发——最新 BAT面试题合集(持续更新中)