YYMemory的学习

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信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值