![](/img/trans.png)
[英]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.