Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Build Status Platform

A framework for saving objects persistent on disk. Extended by a dictionary that saves seen objects for faster delivery on duplicate requests.


  • Saving & retrieving objects with NSCoding protocol on disk
  • Cache used objects in dictionary for usage on runtime
  • Include GCD for async requests and saving to don't block the main thread
  • Use singleton instance for usage outside the framework
  • Secondary indices for categorization of objects
  • Own protocol for object serialization Using new Codable for object serialization
  • Own index class
  • Reduce used disk space amount
  • Caching algorithm for most used object and for reducing memory usage
  • Auto save secondary indices on disk
  • Tests for every important action


This table shows the peformance of the framework, including the number of shown objects and several ways of receiving the entire amount back:

function / # of objects 100 1.000 10.000 50.000
read direct from disk (test case) ~0 0,343 3,3 s -
read from memory (test case) ~0 0,00268 s 0,0303 s -
read mixed async 0,028 0,272 s 2,673 s -
read labeld objects (n/2) 0,001 s 0,001 s 0,008 s -
write objects without labels 0,088 s 0,874 s 8,764 s -
write objects with labels 0,089 s 0,910 s 11,901 s -
Test with plain objects with two basic attributes
used disk space ~50MB 3,9 MB 39 MB
used memory space 400 KB ~120 MB ~700 MB


Init MKCacheStorage

You can initiate an MKCacheStorage instance via the singleton pattern, with the shared variable shown below:

let mkcstorage: MKCacheStorage = MKCacheStorage.shared

Save objects

The save method stores objects in the framework; if desired, you can also give an array with labels for the object:

  • save(object: NSObject, under identifier: String, result:@escaping (Bool) -> ())
  • save(object:NSObject, under identifier: String, with labels: [String], result:@escaping (Bool) -> ())
//saving objects
let id = "User1"
let object = MyObject() object, under: id, result: { success in
    //do stuff

//saving objects with given labels
let labels = ["friends, "contacts"] object, under: id, with: [labels], result: { success in
    //do stuff

Retrieve objects

There are two methods for retrieving objects:

  • get(identifier: String, result:@escaping (NSObject?) -> ())
  • get(label: String, result:@escaping ([NSObject]) -> ())

Code example:

//get object by id
let id = "User1"

mkcstorage.get(identifier: id, result: { (object: MyObject?) in
    if let retrievedObj = object as? MyObject {
        //do stuff with object

//get objects by label
let label = "contacts"

mkcstorage.get(label: label) { (objects: [MyObject]) in
    //do stuff with objects

Object preparation

To store an object in MKCacheStorage, you'll need to (auto)implement the Codable protocol:

class MyObject: Codable {
    var name: String
    var age: Int

    init(name: String, age: Int) { = name
        self.age = age


Storage for saving objects persistent on disk for speed up loading processes and offline usage








No releases published


No packages published