基本思路
由内存缓存和磁盘缓存组成,内存缓存提供容量小但高速的存取功能,磁盘缓存提供大容量但低速的持久化存储,磁盘缓存中磁盘存储采用了文件+sqlite结合的方式。
内存缓存
- 通过双向链表维护一个key集合,值的存储通过字典实现(CFMutableDictionaryRef)淘汰算法作用于双向链表
- LRU淘汰算法: 根据数量、存储空间和时间 (含义:Least Recently Used 意为最近最少使用,这个算法的精髓在于如果一块数据最近被访问,那么它将来被访问的几率也很高,根据数据的历史访问来淘汰长时间未使用的数据)
磁盘缓存
- 线程安全:通过信号量加锁(使用信号量的原因:信号量等待时,不消耗CPU资源,适合长时间等待。扩展:锁的种类及各个锁的优劣)
某些代码细节的疑问:
- @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
扩展
双向链表
图示:

特点:
- 头结点只有后驱,尾节点只有前驱
- 优点:可以找到前驱和后继,可进可退;缺点:增加删除节点复杂。
锁的种类及各个锁的优劣:
未完待续...
网友评论