[英]Should I delete underlying persistent store files after calling destroyPersistentStore on a NSPersistentStoreCoordinator?
[英]Can multiple NSPersistentStoreCoordinator instances be connected to the same underlying SQLite persistent store?
我读过的关于在多个线程上使用Core Data的所有内容都讨论了使用多个共享单个NSPersistentStoreCoordinator
NSManagedObjectContext
实例。 这是理解的,我已经使它在一个应用程序中工作,该应用程序在主线程上使用Core Data来支持UI,并且具有可能需要一段时间才能运行的后台获取操作。
问题是NSPersistentStoreCoordinator
基础SQLite持久性存储的访问进行序列化,因此仍然存在背景提取操作阻止UI的情况。
后台获取操作永远不会更新数据,只能从中读取数据。 我可以在连接到相同底层SQLite持久性存储的后台线程上设置完全并行的Core Data堆栈( NSManagedObjectContext
, NSManagedPersistentStoreCoordinator
和NSManagedObjectModel
)吗? 看起来这样可以在UI线程和后台获取操作之间提供完全的并发性。
我对此的初步答案现在是肯定的 。
我通过传递NSPersistentStore
实例初始化我的后台操作。 在后台线程中,此存储的属性(包括URL)用于创建一个全新的Core Data堆栈,如下所示:
// create managed object model
NSURL *modelUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"..." withExtension:@"..."];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];
// create persistent store coordinator
NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
NSError *error = nil;
[persistentStoreCoordinator addPersistentStoreWithType:[store type]
configuration:[store configurationName]
URL:[store URL]
options:[store options]
error:&error];
// create managed object context
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:persistentStoreCoordinator];
[persistentStoreCoordinator release];
[managedObjectModel release];
然后,我使用这个新创建的NSManagedObjectContext
实例执行后台获取。
一切似乎都很好。 不过,我还没有接受我自己的答案,因为我希望有人能为我的研究结果提供支持或反对的证据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.