YYCache
基于YYMemonryCache、YYDiskCache封装的缓存工具
YYMemonryCache
概述
内部维护了一个可变字典保存缓存的数据,使用LRU算法管理这些数据。
属性
countlimit:节点最大数量
costlimit:有自定义性质的节点最大量
ageLimit:节点的最大存在时间
autoTrimInterval 间隔多久清理一次节点 默认5s
shouldRemoveAllObjectsOnMemoryWarning 收到内存警告时清空所有节点 默认:YES
shouldRemoveAllObjectsWhenEnteringBackground app切换到后台时清空所有节点 默认:YES
releaseOnMainThread 主线程释放节点 默认:NO
releaseAsynchronously 异步释放节点 默认:YES
成员变量
_YYLinkedMap *_lru
@interface _YYLinkedMap : NSObject {
@package
CFMutableDictionaryRef _dic; // 保存节点的字典
NSUInteger _totalCost; //带有自定义性质的数据最大量
NSUInteger _totalCount; //缓存总个数
_YYLinkedMapNode *_head; //头部节点
_YYLinkedMapNode *_tail; //尾部节点
BOOL _releaseOnMainThread; //主进程释放
BOOL _releaseAsynchronously //异步线程释放
}
@interface _YYLinkedMapNode : NSObject {
@package
__unsafe_unretained _YYLinkedMapNode *_prev; // 上一个节点
__unsafe_unretained _YYLinkedMapNode *_next; // 下一个节点
id _key; // key
id _value; //值
NSUInteger _cost; // 自定义节点的一个数值
NSTimeInterval _time; //节点添加时间
}
相关方法
init
在dispatch_global_queue中,延迟autoTrimInterval时间调用_trimInBackground方法进行三个参数的校验:1.costLimit属性校验 2.totalLimit属性校验 3.ageLimit属性校验
setObject:forKey:withCost:
根据key在_YYLinkedMap中查找节点,如果取到了就更新节点信息,更新_YYLinkedMap的_totalCost,调用bridgeNodeToHead方法移动到头结点;如果没有取到就新建节点,调用insertNodeAtHead方插入到_YYLinkedMap中,更新_YYLinkedMap的_totalCost、_totalCount
objectForKey:
根据key在_YYLinkedMap中查找节点,如果取到调用bridgeNodeToHead方法移动到头结点,返回节点value
removeObjectForKey:
根据key在_YYLinkedMap字典中查找是否有节点,如果有删除节点,更新_YYLinkedMap的_totalCost、_totalCount信息