AALRUCache(最近最少使用原则)简单好用的iOS内存管理工具

前言:最近在刷LeetCode时,遇到这样一道题,实现一个最近最少使用原则的实例, 146. LRU缓存机制, 👈这个,力扣146题,在我使用swift完成这道题之后,想着可以应用到iOS项目中,做一个用于内存管理的实例工具出来,于是便有了这个工具

实现原理:

工具使用双向链表和哈希表结合的方式,实现LRU的读取和存储;并针对iOS的特性,进行适当的封装,使用时可以直接把他当成是一个类似数组或者字典这样的存储类型,设置好上限阈值后,在存储数量到达阈值后,会自动清除最久未使用的内容,保证内存的高效利用,工具使用swift封装。

集成方式:

1. Cocoapods

pod 'AALURCache'

2. 直接下载GitHub# AALRUCache中的代码,将AALRUCache/AALRUCache/Classes目录下的两个swift文件拖入工程使用(PS:纯swift类,OC无法使用)

image.png

使用方式:

1. 初始化实例

//AALRUCache<K: Hashable, V: Equatable>
//public init(_ capacity: Int) {
//     maxCount = capacity
//}
let cache = AALRUCache<String, String>.init(20)

初始化的capacity参数为可以缓存的最大数量,初始化使用了两个范型来做类型约束,K为之后存取的键值类型,V为存取的数据类型。
2. 使用

  • 存入有三种方法
cache["key"] = "value"
cache.put("key", "value")
cache.append("key", "value")

使用[]也就是subscript方法时,可以存入nil空值,如果该key值下有数据,数据会被删除,总体也和字典一致,已存在的key赋值会覆盖旧值

  • 取出有两种方法
let value = cache["key"]
let value = cache.get("key")

如果该键值不存在,会返回nil空值

  • 使用key值删除数据有两种方法
cache.remove("key")
cache["key"] = nil

key值不存在没有影响
3. 扩展
为了使功能更强大,在封装时,我将value的类型设置为Equatable,然后使用swift的高阶函数,实现了从value获取key值的反向操作,当然如果value不唯一,返回的是哈希表最前面的key值

func key(for value: V) -> K? {
    return dic.first(where: { (set) -> Bool in
        return value == set.value.val
    })?.key
}

使用者完全可以把这个工具当作一个字典来使用,可以存储基本数据类型和类实例,设置好内存数量上限之后,就会自动使用LRU原则管理存储的数据,这些使用者是无感的,非常简单好用,我们可以在很多需要动态加载大数量级数据的地方使用这个工具,他可以帮我们把内存控制在一个良好的状态下,推荐👍

欢迎集成和使用,联系方式:e2shao1993@163.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容