PINCache
适用于 iOS 和 OS X 的快速、非死锁并行对象缓存。
PINCache 是基于 TMCache 的分支,重新设计以修复由高频率使用引起死锁的问题。它是一个用于持久化成本高昂的、难以重新生成的临时对象的键/值存储工具,例如下载的数据或慢速处理的结果。它由两个自相似存储组成,一个在内存中(PINMemoryCache)和一个在磁盘上(PINDiskCache),所有这些都由 GCD 支持,并允许多线程同时安全访问。在 iOS 上,PINMemoryCache
在应用程序收到内存警告或进入后台时将自行清除。存储在 PINDiskCache
中的对象将一直保留,直到您手动或通过设置字节或年龄限制来修剪缓存。
PINCache
和 PINDiskCache
接受任何符合 NSCoding 协议的对象。放入的方式如下
Objective-C
UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] scale]];
[[PINCache sharedCache] setObject:img forKey:@"image" block:nil]; // returns immediately
Swift
let img = UIImage(data: data, scale:UIScreen.main.scale)
PINCache.shared().setObject(img, forKey: "img")
以这种方式取出
Objective-C
[[PINCache sharedCache] objectForKeyAsync:@"image" block:^(PINCache *cache, NSString *key, id object) {
UIImage *image = (UIImage *)object;
NSLog(@"image scale: %f", image.scale);
}];
Swift
PINCache.shared().object(forKey: "image") { (cache, key, object) in
if let image = object as? UIImage {
print("image scale: %f", image.scale)
}
}
Both PINMemoryCache
和 PINDiskCache
使用锁来保护读写操作。PINCache
协调它们,以便将对象添加到内存中的同时,背景中安全地将其写入磁盘。这两个缓存都是 PINCache
的公共属性,因此如果需要,可以轻松单独操作一个或另一个。
集合也适用。多亏了NSKeyedArchiver
的魔法,集合中重复的对象只有其中一个在磁盘上占用空间
Objective-C
NSArray *images = @[ image, image, image ];
[[PINCache sharedCache] setObject:images forKey:@"images"];
NSLog(@"3 for the price of 1: %d", [[[PINCache sharedCache] diskCache] byteCount]);
Swift
// In Swift, Array, String, and Dictionary are all value types.
let images = [image, image, image] as NSArray // Cast to NSArray
PINCache.shared.setObject(images, forKey: "images")
print("3 for the prices of 1: %d", PINCache.shared.diskCache.byteCount)
安装
手动
下载最新的标签链接,并将PINCache
文件夹拖入你的Xcode项目。
通过双击docs/
下方的.docset
文件来安装文档,或在cocoadocs.org上在线查看。
Git子模块
git submodule add https://github.com/pinterest/PINCache.git
git submodule update --init
CocoaPods
将PINCache添加到你的Podfile
中,然后运行pod install
。
Carthage
将以下行添加到你的Cartfile
中,并运行carthage update --platform ios
。然后按照Carthage的这些说明嵌入框架。
github "pinterest/PINCache"
要求
PINCache 需要 iOS 8.0、tvOS 9.0、watchOS 2.0 或 macOS 10.8 及以上版本。
联系
许可证
版权所有 2013 Tumblr, Inc. 版权所有 2015 Pinterest, Inc.
根据 Apache License, Version 2.0(“许可证”);除适用法律要求或书面同意外,未经许可证不得使用本文件。您可以在 http://www.apache.org/licenses/LICENSE-2.0 获取许可证的副本
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样” basis 分发,不提供任何明示或暗示的保证或条件。请参阅许可证 了解许可下权限和限制的特定语言。