NSCache
NSCache是一个类似NSDictionary的可变集合。
NSCache中有一个方法在缓存中设置指定键名对应的值- (void)setObject:(ObjectType)obj forKey:(KeyType)key; ,这里key只是对obj的一个强引用。
NSCache是线程安全的。
NSCache在系统内存很低时,会自动释放对象,建议收到内存警告时调用removeAllObject主动释放缓存中的对象
@property NSUInteger countLimit;
// 能够缓存对象的最大数量。默认值为0,表示没有限制。
网络请求时有个需求做个接口请求的缓存,当baseurl,path,paramValues 组成的字符串为key,请求的结果作为obj去缓存。
外存缓存
文件 : 归档
数据库 : sqlit , FMDB
keyChain :
NSUserDefault :常用不说了
缓存策略
什么是LRU?
一种数据缓存策略,最近最少使用。
LRU-1 (简单版) 最近使用过一次
1)新数据插入到链表头部;
2)每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
3)当链表满的时候,将链表尾部的数据丢弃
LRU-K 最近使用过K次
1)数据第一次被访问,加入到访问历史列表;
2)如果数据在访问历史列表里后没有达到K次访问,则按照一定规则(FIFO,LRU)淘汰;
3)当访问历史队列中的数据访问次数达到K次后,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;
4)缓存数据队列中被再次访问后,重新排序;
5)需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第K次访问离现在最久”的数据
网友评论