Track is a thread safe cache write by Swift. Composed of DiskCache and MemoryCache which support LRU.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Demo
Framework
Track change file path problem Dec 12, 2016
.gitignore
.swift-version
LICENSE
Track.podspec
logo.png memory cache thread safe loop May 26, 2016
readme.md
如果你在天朝.md

readme.md

Language Pod Version Pod Platform Carthage Compatible License

Track is a thread safe cache write by Swift. Composed of DiskCache and MemoryCache which support LRU.

Features

  • Thread safe: Implement by dispatch_semaphore_t lock and DISPATCH_QUEUE_CONCURRENT. Cache methods are thread safe and no deadlock.

  • LRU: Implement by linkedlist, it`s fast. You can manage a cache through functions to limit size, age of entries and memory usage to eliminate least recently used object.

  • Support async and sync operation.

  • Cache implement SequenceType Generator, support subscrip for ... in map flapmap filter...

Use

Base use

Support Sync and Async Set, Get, RemoveObject, RemoveAll and Subscript.

let track = Cache.shareInstance

track.set(object: "object", forKey: "key")

track.object(forKey: "key")

track.removeObject(forKey: "key") { (cache, key, object) in }

track.removeAllObjects { (cache, key, object) in }

track["key"] = "object"

print(track["key"])

Other use

MemoryCache and DiskCache has feature of LRU, so they can eliminate least recently used object according countLimit, costLimit and ageLimit.

let diskcache = DiskCache.shareInstance

diskcache.countLimit = 20

diskcache.costLimit = 1024 * 10

let memorycache = MemoryCache.shareInstance

memorycache.trim(toAge: 1000) { (cache, key, object) in }

memorycache.trim(toCount: 10) { (cache, key, object) in }

New features: SequenceType Generator

Cache support thread safe for ... in map forEache...

let cache: Cache = Cache.shareInstance

for i in 1 ... 5 {
    cache.set(object: "\(i)", forKey: "\(i)")
}

for object in cache {
    print(object)
}
output: ("5", 5) ("4", 4) ("3", 3) ("2", 2) ("1", 1)
cache.forEach {
    print($0)
}
output: ("1", 1) ("2", 2) ("3", 3) ("4", 4) ("5", 5)
let values = cache.map { return $0 }

print(values)
output: [("5", 5), ("4", 4), ("3", 3), ("2", 2), ("1", 1)]

Installation

CocoaPods

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

Support Swift 3.0

pod 'Track'

Support Swift 2.3

pod 'Track', :git => 'https://github.com/maquannene/Track.git', :branch => 'feature/S-2.3'

If you want to use the new features of Track

pod 'Track', :git => 'https://github.com/maquannene/Track.git'

Carthage

github "maquannene/Track"

Manually

  1. Download and drop /Track folder in your project.
  2. Congratulations!

Thanks

Thanks YYCache,PINCache very much. Some ideas from them.

License

Track is released under the MIT license.

如果来自天朝点击查看更多实现细节文章