本资源由 伯乐在线 – 张发白 整理
HardCoreData是基于Marcus Zarra 的多线程方法创建的 Core Data 栈,能够将写入到私有队列解耦,保持UI操作的流畅性。
HardCoreData由两个基本元素组成: HCDCoreDataStack 和 HCDCoreDataStackController。
HCDCoreDataStack
封装本地 CoreData 栈设置
Objective-C
1234567891011121314151617 | /* Convenience initializers */ + (instancetype)binaryStackWithName:(NSString *)modelName;+ (instancetype)inMemoryStackWithName:(NSString *)modelName;+ (instancetype)sqliteStackWithName:(NSString *)modelName;+ (instancetype)stackWithModelName:(NSString *)modelName storeType:(NSString *)storeType; /** * Designated initializer * * @param modelName NSString * @param storeType NSString * * @return HCDCoreDataStack */ – (instancetype)initWithModelName:(NSString *)modelName storeType:(NSString *)storeType NS_DESIGNATED_INITIALIZER; |
HCDCoreDataStack protocol
因为 HCDCoreDataStack 不仅是一个类,还是一个协议,所以你可以通过实现协议来创建自定义的栈。
Objective-C
1234567891011121314 | @protocol HCDCoreDataStack <NSObject> @required /* Represents current store coordinator */@property (nonatomic, strong, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; /* Represents currentm object model */@property (nonatomic, strong, readonly) NSManagedObjectModel *managedObjectModel; /* Represents your single source of truth. Associated with main queue. */@property (nonatomic, strong, readonly) NSManagedObjectContext *mainManagedObjectContext; @end |
HCDCoreDataStackController
创建子上下文与保存操作。
Objective-C
1234567891011121314151617181920 | /** * Designated initializer * * @param stack HCDCoreDataStack * * @return HCDCoreDataStackController */- (instancetype)initWithStack:(id <HCDCoreDataStack>)stack NS_DESIGNATED_INITIALIZER; /** * Instantiates new child context with given concurrency type.(使用给定的并发类型实例化新的子上下文) * You are responsive for retaining. */- (NSManagedObjectContext *)createChildContextWithType:(NSManagedObjectContextConcurrencyType)type; /** * 保存主上下文(main context),并将更改(changes)推送到持久化保存。 * 执行时会保证线程安全 */- (void)save; |
应用实例
#p#分页标题#e#
Objective-C
12345678910111213141516171819202122 | /* Create core data stack */HCDCoreDataStack *stack = [HCDCoreDataStack sqliteStackWithName:@”Model”]; HCDCoreDataStackController *coreDataController = [HCDCoreDataStackController controllerWithStack:stack]; NSManagedObjectContext *backgroundContext = [coreDataController createChildContextWithType:NSPrivateQueueConcurrencyType]; [backgroundContext performBlock:^{ Person *person = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Person class]) inManagedObjectContext:backgroundContext]; person.firstName = @”John”; person.lastName = @”Doe”; /* 保存子上下文 */ [backgroundContext save:nil]; /* 将数据保存到持久化存储 */ [coreDataController save]; }]; |
使用
如果你想要运行示例工程,将仓库克隆到本地,然后在示例项目路径下运行 pod install 。
安装
可以通过CocoaPods安装 HardCoreData,只需在podfile中添加以下内容即可安装:
Shell
1 | pod “HardCoreData” |
作者
Serg Krivoblotsky, krivoblotsky@me.com
历史版本
发布版本
开源地址:http://github.com/Krivoblotsky/HardCoreData