Skip to content
/ CacheKit Public
forked from davbeck/CacheKit

Simple and flexible caching mechanism for in memory and persistent caches.

License

Notifications You must be signed in to change notification settings

edys/CacheKit

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CacheKit

[CI Status](https://travis-ci.org/David Beck/CacheKit) Version License Platform

Usage

To run the example project, clone the repo, and run pod install from the Example directory first.

You can access a cache similarly to NSMutableDictionary or NSCache:

[cache setObject:@1 forKey:@"A"];
[cache objectForKey:@"A"]; // returns @1 if it still exists

In addition, you can specify an expiration date:

[cache setObject:@1 forKey:@"A" expiresIn:30.0];
[cache objectForKey:@"A"]; // returns @1
// 31 seconds later...
[cache objectForKey:@"A"]; // returns nil

There are several reasons why -objectForKey: would return nil. The object could have expired, deleted in a background thread, or in the case of an in memory cache, the object could have been evicted during a memory warning. The best way to use an CKCache is to provide a content block in the case of a cache miss.

[cache objectForKey:@"A" withContent:^{
    return @1;
}]; // returns @1 if the object for @"A" doesn't exist or has expired

You can use shared caches if you just want to quickly throw data into something. Just make sure you use globally unique keys. For instance, you could prefix keys with a class name.

[[CKSQLiteCache sharedCache] objectForKey:@"MyViewController.A" withContent:^{
    return @1;
}];

There are several different subclasses of CKCache for different purposes:

CKMemoryCache

This is a wrapper around NSCache. It's objects are not persisted between launches.

CKFileCache

This is a persistent cache that stores it's objects as files on disk. Use this cache if the objects you are storeing are extremely large. Each object is it's own file, encoded using NSCoding and stored in the caches directory under the name of the cache and key. Make sure that the keys you use are valid file names and the objects conform to NSCoding.

The cache also has an internal NSCache for qucker access.

CKSQLiteCache

This is a persistent cache that uses an SQLite database to store it's objects. The database is saved to the cache directory by the name of the cache. Each object is encoded using NSCoding and stored as a BLOB in the database. Make sure that the objects conform to NSCoding. Use this type of cache for most persistent caching. The only reason you might want to use CKFileCache instead is if your objects were very large.

FMDB is used internally for the interface to SQLite.

The cache also has an internal NSCache for qucker access.

CKNullCache

A useless cache that doesn't store anything. Use this if you want to test your app without caching and you want to quickly swap out another cache type. Make sure to provide fallback content blocks when fetching data since the bare -objectForKey: will always return nil no matter what.

Requirements

CacheKit requires iOS 6 or 10.8.

Installation

CacheKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "CacheKit"

License

CacheKit is available under the MIT license. See the LICENSE file for more info.

About

Simple and flexible caching mechanism for in memory and persistent caches.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 98.3%
  • Ruby 1.7%