CocoaPods trunk is moving to be read-only. Read more on the blog, there are 14 months to go.
| TestsTested | ✗ |
| LangLanguage | SwiftSwift |
| License | MIT |
| ReleasedLast Release | Sep 2016 |
| SPMSupports SPM | ✗ |
Maintained by maquannene.
Track is a thread safe cache write by Swift. Composed of DiskCache and MemoryCache which support LRU.
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…
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)]
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
/Track folder in your project.Thanks YYCache,PINCache very much. Some ideas from them.
Track is released under the MIT license.
如果来自天朝点击查看更多实现细节文章