Track 是由 Swift 编写的线程安全缓存。由 DiskCache 和 MemoryCache 组成,支持 LRU。
线程安全:通过 dispatch_semaphore_t lock
和 DISPATCH_QUEUE_CONCURRENT
实现。缓存方法线程安全且无死锁。
LRU:通过链表实现,速度快。您可以通过函数管理缓存,限制条目数量、条目年龄和内存使用,以消除最少使用对象。
支持异步和同步操作。
缓存实现 SequenceType
Generator
,支持 subscript
for ... in
map
flapmap
filter
…
基本使用
支持同步和异步设置、获取、移除对象、移除所有和下标。
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"])
其他使用
MemoryCache 和 DiskCache 具有LRU功能,因此它们可以根据 countLimit
、costLimit
和 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 }
新增功能:SequenceType 生成器
缓存支持线程安全的 for ... in
map
forEach
…
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!
支持 Swift 3.0
pod 'Track'
支持 Swift 2.3
pod 'Track', :git => 'https://github.com/maquannene/Track.git', :branch => 'feature/S-2.3'
如果您想使用 Track 的新功能
pod 'Track', :git => 'https://github.com/maquannene/Track.git'
Carthage
github "maquannene/Track"
手动安装
/Track
文件夹拖放到您的项目中。非常感谢 YYCache 和 PINCache。一些想法来自它们。
Track 在 MIT 许可下发布。
如果你来自天朝点击查看更多实现细节文章