KMCache 0.1.9

KMCache 0.1.9

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
发布最新发布2016年3月

MiokeMioke 维护。



KMCache 0.1.9

  • Mioke

灵感来自 YYCache.

用法

  1. 克隆或下载zip文件到你的电脑,将“KMCache”文件夹复制到你的项目中
  2. 如果你正在使用 Cocoapods

    pod "KMCache"

思考

使用 CFMutableDictinaryRef 作为快速搜索的容器。创建 _cache_node_cache_linked_list 来建立有序数据所需的链表。_cache_node 是一个具有 keyvaluetimestampsize 属性,并且有 _prev_next 指针的节点。它存储对象和其他信息。_cache_linked_list 是按插入时间排序的,并且在节点再次使用时刷新节点。

将其视为一个队列,每次你想将一个对象添加到缓存中,首先创建一个节点,并将其添加到队列的尾部。当添加一个节点时,会执行以下两个操作:1. 将节点添加到字典中。2. 将节点的前指针设置为队列的尾部,节点成为新的尾部。

搜索是从字典中获取值。

KMCache 提供两种释放类型,按时间和按大小释放。节点信息包含 time 属性,当缓存自动清理时,会检查此属性。

KMCache 会自动计算字典数据的大小,但这实际上非常耗时。想想看,每次我们将一个节点添加到列表中,我们必须将字典转换为 NSData 并计算它。更糟糕的是,如果字典的大小太大,我们不知道应该释放多少个节点。所以我放弃了。

最终,在 YYCacheNSCache 的注释的帮助下,更好的方法是设置一个 _cache_node 的属性来记录节点的大小。但大小不是自动生成的,它是由用户设置的。

注意

自动清理每5秒钟运行一次(默认),我在 KMCache 中设置了一个 NSTimer。计时器被添加到主运行循环中,所以如果主线程正在执行同步操作,计时器也会停止。