EDStorage 0.2.2

EDStorage 0.2.2

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布最新发布2014 年 12 月

Andrew Sliwinski 维护。



EDStorage 0.2.2

  • 作者:
  • Andrew Sliwinski

存储

持久化所有事物!耶!

为了保持代码的可重用性(DRY),EDStorage 被创建出来以解决在 iOS 应用程序中将数据写入磁盘时产生的相当多的样板代码。iOS 中的磁盘 I/O 是同步的,因此这部分样板代码通常被写入以通过将 I/O 移到后台线程来提高性能。EDStorage 通过将每个写入实例转换为一个 NSOperation 来实现这一点,该操作由一个单独的 NSOperationQueue 管理。所有这些都在后台完成,同时通过类别提供高级方法。

EDStorage 努力提供以下三个功能:

  • 基于类别的抽象接口,使得将数据持久化到磁盘变得简单。
  • 高度通用的管理接口,使得扩展 EDStorage 同样简单。
  • 速度和安全。

基本使用

开始使用 EDStorage 的最简单方法是查看附带的示例应用程序。Xcode 项目文件可以在 example > storage.xcodeproj 中找到。

为了将 EDStorage 添加到项目中,您将需要将 EDStorage 目录的整个内容添加到项目中。EDStorage 是建立在 foundation 库之上的,所以不需要额外的框架。要将所有包含的存储类别引入,只需

#import "EDStorage.h"

每个类别都有根据特定类的需求略有不同的接口,但为了举例,让我们来看看如何将一个 UIImage 持久化到应用程序缓存目录

- (void)doSomething
{
    UIImage *image = [UIImage imageNamed:@"keyboardCat.png"];

    [image persistToCache:^(NSURL *url, NSUInteger size) {
        NSLog(@"FTW!: %@ | %d bytes", url, size);
    } failure:^(NSError *error) {
        NSLog(@"UH OH: %@", error);
    }];
}

将数据持久化到临时和文档应用程序目录同样简单

[image persistToTemp:^(NSURL *url, NSUInteger size) {
    NSLog(@"FTW!: %@ | %d bytes", url, size);
} failure:^(NSError *error) {
    NSLog(@"UH OH: %@", error);
}];
[image persistToDocuments:^(NSURL *url, NSUInteger size) {
    NSLog(@"FTW!: %@ | %d bytes", url, size);
} failure:^(NSError *error) {
    NSLog(@"UH OH: %@", error);
}];

实现存储类别

EDStorageManager 提供了一个用于与类别进行接口的单个块方法

- (void)persistData:(id)data withExtension:(NSString *)ext toLocation:(Location)location success:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;

类别只是通过处理将类实例转换为 NSData 对象来抽象化调用此方法在 EDStorageManager 上的过程。参见 NSData+Storage 实现。例如,UIImage 的存储类别仅通过调用 UIImageJPEGRepresentation() 将 self 传递给 NSData。

如果您创建了一个有用的类别,请让我知道!欢迎 Pull 请求。


位置

EDStorageDirectoryCache
EDStorageDirectoryTemp
EDStorageDirectoryDocuments

NSData+存储方法

- (void)persistToCacheWithExtension:(NSString *)extension success:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;
- (void)persistToTempWithExtension:(NSString *)extension success:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;
- (void)persistToDocumentsWithExtension:(NSString *)extension success:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;

NSDictionary+存储方法

- (void)persistToCache:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;
- (void)persistToTemp:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;
- (void)persistToDocuments:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;

UIImage+存储方法

- (void)persistToCache:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;
- (void)persistToTemp:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;
- (void)persistToDocuments:(void (^)(NSURL *url, NSUInteger size))success failure:(void (^)(NSError *error))failure;

iOS 支持

EDStorage已在iOS 5及更高版本上进行测试。较旧版本的iOS可能也能工作,但当前不支持。

ARC

从v0.2.0版本开始,EDStorage使用ARC构建。如果您在项目中包含EDStorage,而该项目使用自动引用计数(ARC),则需要将所有EDStorage源文件的编译器标志设置为-fobjc-arc。要在Xcode中这样做,请转到您的活动目标并选择“构建阶段”选项卡。现在选择所有EDStorage源文件,按Enter键,输入-fobjc-arc然后点击“完成”来启用EDStorage的ARC。