YYCache 源码地址
内存淘汰机制 LRU
LRU 最近最少使用 淘汰算法
* YYCache 使用 双向链表实现, 使用某个缓存时, 将缓存移到链表的头部,被移除的部分,前后两端再连接上. 再触发内存淘汰的维度限制时, 从双向链表的尾部开始移除节点, 知道满足条件.
* HashMap 是来配合双向链表,用于减少时间复杂度的。它是可以快速的(O(1)的时间)定位,链表中某个值是否存在.
* YYCache 中使用了 CFMutableDictionary 而不是 NSDictionary 来存储节点, 主要是为了存储 key value时的高效
* 之所以选择 双向链表而不是单向链表是为了 删除节点的时候更高效, 删除单链表中的某个结点时,一定要得到待删除结点的前驱,得到该前驱有两种方法,
* 第一种方法是在定位待删除结点的同时一路保存当前结点的前驱。
* 第二种方法是在定位到待删除结点之后,重新从单链表表头开始来定位前驱。
* 尽管通常会采用方法一。但其实这两种方法的效率是一样的,指针的总的移动操作都会有2*i次. 而如果用双向链