【发布时间】:2014-04-22 22:56:05
【问题描述】:
我对如何在主线程以外的其他线程上创建MOC 感到困惑。
一方面,在the doc,可以阅读
这样做的结果是上下文假定默认所有者是 分配它的线程或队列——这由线程决定 调用它的 init 方法。因此,您不应该初始化 一个线程上的上下文,然后将其传递给另一个线程。
但另一方面,我看到了一个辅助MOC 的代码是通过以下方式创建的,在主线程上:
NSManagedObjectContext *parentContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[parentContext performBlockAndWait:^{
[parentContext setUndoManager:nil]; // no point in it supporting undo
[parentContext setPersistentStoreCoordinator:coordinator];
}];
那么,创建辅助MOC 的好方法是什么?也许我应该准确地说,这个辅助MOC 是项目中心类的@property(例如AppDelegate)。
【问题讨论】:
-
它们的相对并发类型都是正确的。第一个引用
NSConfinementConcurrencyType,另一个引用NSPrivateQueueConcurrencyType(上下文绑定到执行队列)。文档很旧,不包括“新”队列并发类型。 -
好吧,我想第二种方法最好,不是吗?
标签: multithreading core-data concurrency nsmanagedobjectcontext