iOS缓存控件,支持哈希,队列和时间池
Objective-C C++
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Demo.xcodeproj init proj Dec 22, 2012
Demo 增加多线程支持,并加锁 Mar 21, 2013
Kache 调整清理过期逻辑 Nov 13, 2013
.gitignore Update .gitignore Dec 22, 2012
LICENSE Create LICENSE May 6, 2013
README.md 更新Readme Mar 22, 2013

README.md

kache

iOS缓存控件,支持哈希,队列和时间池。

Kache提供了一套数据缓存方案。无缓存场景下,数据从远程服务器加载到客户端,生成数据对象供客户端应用使用。

使用Kache作为应用的缓存方案,流程则为:每次需要加载数据之前,开发者先从Kache中获取数据

若Kache返回一个空值则证明该缓存项不存在,需要再次从远程服务器获取数据,数据返回,生成数据对象的同时,通过Kache存入缓存,供下次使用;

若Kache返回数据,则可直接生成数据对象。

使用方法

import Kache的头文件 KCH.h

#import "KCH.h"

Kache的每个实例是一个缓存空间不同的缓存空间互相独立。开发者可以单独初始化Kache实例对象,并指定FileToken作为标记,或直接使用Kache提供的静态方法,操作默认空间。 Kache提供的所有静态方法,都有对应Kache的实例方法。

添加缓存 把ID为“123456”的一个数据“ThisIsADemoData.”存入缓存,1小时候过期。

[Kache setValue:@"ThisIsADemoData" forKey:@"123456" expiredAfter:3600];

取出KEY为“123456”的数据,并打印。

NSString *demoData = [Kache valueForKey:@"123456"];
NSLog(@"Data:%@", demoData);

使用KPool。KPool提供了一个可变大小的缓存池,原理是:当存入Pool中的对象超过配置文件中配置的KACHE_DEFAULT_POOL_SIZE,则最早过期的一个将被清除。自己定义的Pool可以指定这个值。 一个缓存控件内可以使用多个Pool,开发者可以选择自己定义或使用默认的。 读取Pool中的值与普通对象一样。

[Kache setValue:@"PoolValue1" inDefaultPoolForKey:@"key_1_in_pool" expiredAfter:0];

使用KQueue。KQueue提供了一个可变大小的缓存队列。与KPool一样,开发者可以选择使用默认或自定义的。 KQueue中的对象不允许指定过期时间,全部使用默认值,切没有KEY,只能通过push方法存入和pop方法获取。

[Kache pushValue:@"inQueue1"]; // 队列:{"inQueue1"}
[Kache pushValue:@"inQueue2"]; // 队列:{"inQueue1", "inQueue2"}
[Kache pushValue:@"inQueue3"]; // 队列:{"inQueue1", "inQueue2", "inQueue3"}

NSLog(@"%@", [Kache popValue]); // 打印 "inQueue1", 队列:{"inQueue2", "inQueue3"}

调用save方法把缓存空间归档,调用load方法重新载入

[Kache save]; // 归档
[Kache load]; // 重新载入,每次启动自动调用

具体使用方法可参考工程中的Demo,或 iOSSF 项目:https://github.com/gaosboy/iOSSF

配置文件

kache.conf

通过修改配置文件可以改变Kache控件的工作状态

#define     KACHE_DEFAULT_POOL_SIZE     20
#define     KACHE_DEFAULT_QUEUE_SIZE    10

// Default expired time, 10 Days.
#define     KACHE_DEFAULT_LIFE_DURATION 864000

// 把内存归档到磁盘的阈值,单位 byte
#define ARCHIVING_THRESHOLD             50000