工作博客

【iOS】YYCache源码阅读笔记

2018-11-17  本文已影响2人  abs_

基本思路

由内存缓存和磁盘缓存组成,内存缓存提供容量小但高速的存取功能,磁盘缓存提供大容量但低速的持久化存储,磁盘缓存中磁盘存储采用了文件+sqlite结合的方式。

内存缓存

  1. 通过双向链表维护一个key集合,值的存储通过字典实现(CFMutableDictionaryRef)淘汰算法作用于双向链表
  2. LRU淘汰算法: 根据数量、存储空间和时间 (含义:Least Recently Used 意为最近最少使用,这个算法的精髓在于如果一块数据最近被访问,那么它将来被访问的几率也很高,根据数据的历史访问来淘汰长时间未使用的数据)

磁盘缓存

  1. 线程安全:通过信号量加锁(使用信号量的原因:信号量等待时,不消耗CPU资源,适合长时间等待。扩展:锁的种类及各个锁的优劣)

某些代码细节的疑问:

  1. @package的含义: @package修饰变量,对于framework内部,相当于@protected, 对于framework外部,相当于@private。

Using the modern runtime, an @package instance variable has @public scope inside the executable image that implements the class, but acts like@private outside

扩展

双向链表

图示:

双向链表图示

特点:

  1. 头结点只有后驱,尾节点只有前驱
  2. 优点:可以找到前驱和后继,可进可退;缺点:增加删除节点复杂。

锁的种类及各个锁的优劣:

iOS 中常见的几种锁-代码示例

未完待续...

上一篇 下一篇

猜你喜欢

热点阅读