YYCache
YYCache copied to clipboard
关于MemoryCache的疑惑,望解惑
你好,我看你源码里MemoryCahce里有关于Cost、Count和Age的清理策略,这里TrimCost应该怎么理解呢?我认为可以是自己定义的指标,但是我看它的清理策略是清理双向链表的尾部节点,所以即使我们自己定义了指标但是也没啥意义啊,它影响不了清理策略呢。
@louiesanyu
根据我的理解,“cost” 是一个类似存储大小的概念,但不唯一。Apple 的 NSCache 中对 NSCache
的 - (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;
的 cost
的描述是 “Typically, the obvious cost is the size of the value in bytes”。所以 cost 表示一个缓存所消耗大小的概念,比如图片我们可以用分辨率来表示(因为可以粗略的任务分辨率越高,图片数据越大),也可以用转化成二进制流后的大小来表示。
所以此处 TrimCost
还是继续遵循 LRU 的缓存清理策略(包括 count 和 age 也是)。 cost 是限制所有缓存最大可以有多大,count 是限制所有缓存最多可以有多少个,age 是限制缓存最早可以从哪个时间开始存在。
所以,既然始终都是遵循 LRU 策略的,所以无论是 cost,count 还是 age 都是从双向链表的尾部节点考试清除的。