Giter VIP home page Giter VIP logo

kache's Introduction

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

kache's People

Contributors

gaosboy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kache's Issues

问一个小问题

Kache支持一些放到NSArray里面的自定义对象么?好多情况下会有这样的情况~

不太明白为何每次取出缓存数据之后要立即将其删除

KHolder类中的objectForKey方法,每次取出缓存数据之后,都立即将已保存在本地的文件删除,所以造成当离线使用时,第一次能看到数据,之后就再也看不到了。这点让人觉得很奇怪,不是应该等过期了再删除吗?

[KHolder archiveData]导致crash

*** -[NSArray initWithArray:range:copyItems:]: range {0, 2} extends beyond bounds 0 .. 0
(
0 CoreFoundation 0x37c1e8d7 __exceptionPreprocess + 186
1 libobjc.A.dylib 0x3776a1e5 objc_exception_throw + 32
2 CoreFoundation 0x37b7829b -[NSArray initWithArray:range:copyItems:] + 450
3 CoreFoundation 0x37b8c2b9 -[NSArray mutableCopyWithZone:] + 84
4 shoot 0x100645 __22-[KHolder archiveData]_block_invoke + 292
5 libdispatch.dylib 0x307d7d55 _dispatch_call_block_and_release + 12
6 libdispatch.dylib 0x307da897 _dispatch_worker_thread2 + 258
7 libsystem_c.dylib 0x376dd1cf _pthread_wqthread + 294
8 libsystem_c.dylib 0x376dd0a4 start_wqthread + 8
)

              *** -[NSArray initWithArray:range:copyItems:]: range {0, 3} extends beyond bounds [0 .. 1]

(null)
(
0 CoreFoundation 0x354d68a7 __exceptionPreprocess + 186
1 libobjc.A.dylib 0x3787d259 objc_exception_throw + 32
2 CoreFoundation 0x35430263 -[NSArray initWithArray:range:copyItems:] + 450
3 CoreFoundation 0x35444289 -[NSArray mutableCopyWithZone:] + 84
4 shoot 0x100645 __22-[KHolder archiveData]_block_invoke + 292
5 libdispatch.dylib 0x34363c59 _dispatch_call_block_and_release + 12
6 libdispatch.dylib 0x34366817 _dispatch_worker_thread2 + 258
7 libsystem_c.dylib 0x32893dfb _pthread_wqthread + 294
8 libsystem_c.dylib 0x32893cd0 start_wqthread + 8
)

请问作者为什么每次重新启动app,获取不到缓存数据呢?

我在一个需要缓存数据的页面对数据进行了缓存:
[Kache setValue: inDefaultPoolForKey: expiredAfter:];用的这个方法。
然后在appdelegate里面添加了如下代码:

  • (void)applicationWillResignActive:(UIApplication *)application
    {
    [Kache save];
    }
  • (void)applicationDidEnterBackground:(UIApplication *)application
    {
    [Kache save];
    }
    但是,如果不重启app,到这个页面是可以获取到缓存数据的。只要重启app就拿不到混存数据了。
    请问作者该怎么做到可以app重启之后依然可以拿到混存数据呢?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.