iOS

如何设计一个内存缓存库

2017-08-16  本文已影响18人  踏云小子

双向链表 + LRU淘汰算法 + 线程安全

双向链表的设计

用OC来设计双向链表(不是循环链表)

单个节点


image.png

整个链表


image.png
备注:
//使用系统的方法创建结构体,直接用'.'就可以
CGPoint p = CGPointMake(42,42);
NSLog(@"%f", p.x);
//手动创建一个结构体,获取他的元素需要用'->'
CGPoint *p = malloc(1*sizeof(CGPoint));
p->x = 2.0;
NSLog(@"%f", p->x);
free(p);

退一万步说,结构体p是一個不完整的地址,里面的x、y就是地址偏移量,p->x其实拿到的是偏移量的地址,也就是指向x的指针

LRU

1.算法思想

Least Recently Used 近期最少使用算法, 常应用于缓存中的数据淘汰, 其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高“。

2.插入数据
3.读取数据

附录:

id p;
void * key;
key = (__bridge const void *)p

CF->OC:加__bridge_transfer,举例如下:

id obj = (__bridge_transfer id)p;
上一篇 下一篇

猜你喜欢

热点阅读