美文网首页
AALRUCache(最近最少使用原则)简单好用的iOS内存管理

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

作者: Fxxxxxxx | 来源:发表于2019-09-28 19:31 被阅读0次

前言:最近在刷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

相关文章

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

    前言:最近在刷LeetCode时,遇到这样一道题,实现一个最近最少使用原则的实例, 146. LRU缓存机制, ?...

  • iOS MRC 内存管理的基本原则

    iOS MRC 内存管理的基本原则iOS MRC 内存管理的基本原则

  • 内存管理

    OC知识--彻底理解内存管理(MRC、ARC) IOS工程中混合使用ARC与MRC iOS 简单而粗暴的说一说内存...

  • LinkedHashMap与LRU

    LRU:是最近最少使用算法,在内存置换的时候,需要选择最近最少使用的内存块。 下面代码解释,构造器参数的true表...

  • 缓存 -- LRU算法

    什么是LRU算法 LRU算法的全称Least Recently Used。即最近最少使用。LRU算法是内存管理的一...

  • LinkedHashMap实现LRU原理解析

    LRU介绍 LRU是Least Recently Used 最近最少使用算法。是一种常用的内存管理的页面置换算法。...

  • lru算法

    LRU来自英文least recently used, 即最近最少使用. 开始时用于计算机系统的内存管理(页面置换...

  • iOS内存管理及优化

    iOS内存管理的基本介绍: 1.iOS使用的是虚拟内存:段式虚拟内存+页式虚拟内存。 2.iOS没有Swap机制,...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • 面试题

    LruCache原理 LruCache 即最近最少使用内存(Least recently usage cache)...

网友评论

      本文标题:AALRUCache(最近最少使用原则)简单好用的iOS内存管理

      本文链接:https://www.haomeiwen.com/subject/osetpctx.html