iOS开发进阶- 图片缓存框架

iOS开发进阶- 图片缓存框架_第1张图片

课程: 新浪微博资深大牛全方位剖析 iOS 高级面试

一、框架&架构

模块化
分层
解耦
降低代码重合度

二、图片缓存框架

怎样设计一个图片缓存框架?

iOS开发进阶- 图片缓存框架_第2张图片

2.1 图片读写

图片通过什么方式进行读写,过程怎样的?

  • 以图片URL的单向Hash值作为Key
iOS开发进阶- 图片缓存框架_第3张图片
读取流程

2.2 内存设计

内存的设计上需要考虑哪些问题

  • 存储的空间大小Size,根据图片的大小分为不同的存储区域,例如:使用频率高占空间小的会保存的张数多,占内存大的图片保存的张数少。
  • 淘汰策略,第一种队列先进先出的方式淘汰。第二种LRU算法(最近最久未使用算法),在固定时长内是否使用过,未使用则淘汰。需要注意时间/空间开销问题。提高检查触发频率检测。

2.3 磁盘设计

磁盘设计需要考虑哪些问题?

  • 存储方式选择
  • 大小限制
  • 淘汰策略

2.4 网络部分的设计

网络部分的设计需要考虑哪些问题?

  • 图片请求最大并发量
  • 请求超时策略,例如:请求失败时,重新请求。
  • 请求优先级,是否是用户当前紧急使用的图片。

2.5 图片解码

对于不同格式的图片,解码采用什么方式?

  • 应用策略模式对不同图片格式进行解码

在哪个阶段做图片解码处理?

磁盘读取后或者网络请求后。

小结

本节梳理图片缓存库设计的流程和需要考虑的关键点。深入学习可以查看SDWebImage或者YYKit中关于图片换存库的设计。另外找了几篇缓存库相关的优秀博文

  • IOS应用架构思考二(网络图片库)
  • YYImage 设计思路,实现细节剖析
  • YYCache 设计思路
  • 如何打造易扩展的高性能图片组件
  • iOS当中的Cache设计
  • iOS 处理图片的一些小 Tip

你可能感兴趣的:(iOS开发进阶- 图片缓存框架)