PINCache

CocoaPods Carthage compatible Build status

快速、无死锁的 iOS 和 OS X 并行对象缓存。

PINCacheTMCache 的一个分支,经过重新架构,修复了因大量使用而导致的死锁问题。它是一个键/值存储,旨在持久化临时对象,这些对象重现成本很高,例如下载的数据或缓慢处理的结果。 它由两个自相似的存储组成,一个在内存中 (PINMemoryCache),一个在磁盘上 (PINDiskCache),全部由 GCD 支持,可以安全地从多个线程同时访问。 在 iOS 上,当应用程序收到内存警告或进入后台时,PINMemoryCache 会自动清除自身。 存储在 PINDiskCache 中的对象会一直保留,直到您手动或通过设置字节或年龄限制来修剪缓存。

PINCachePINDiskCache 接受任何符合 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)
    }
}

PINMemoryCachePINDiskCache 都使用锁来保护读取和写入。 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)

安装

手动

下载最新的 tag 并将 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 12.0、tvOS 12.0、watchOS 4.0 或 macOS 10.13 及更高版本。

联系方式

Garrett Moon

许可证

版权所有 2013 Tumblr, Inc. 版权所有 2015 Pinterest, Inc.

根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非符合许可证的规定,否则您不得使用此文件。 您可以在 https://apache.ac.cn/licenses/LICENSE-2.0 获取许可证副本

除非适用法律要求或书面同意,否则本软件是按“原样”基础分发的,没有任何形式的明示或暗示的保证或条件。 请参阅许可证,了解有关权限和限制的特定语言。