【发布时间】:2012-03-16 10:32:49
【问题描述】:
我创建了一个系统,我可以从一个单例对象请求一个 NSManagedObjectContext,这取决于它运行的队列。每个串行 GCD 调度队列都与某个任务相关联,因此可以获得自己的上下文,尽管它们都具有相同的持久存储协调器。
我假设这将解决我与线程相关的问题,到目前为止它似乎已经解决了,但现在我有一个不同的问题:如果 2 个串行队列,具有不同的 MOC,都尝试创建上下文执行,它们都锁定并且应用程序冻结。那我错过了什么?
"...[I]如果您为每个线程创建一个上下文,但都指向同一个持久存储协调器,Core Data 会以线程安全的方式访问协调器(NSManagedObjectContext 的锁定和解锁方法)处理递归)。” (source)
我在那里读到的是,Core Data 应该使用我的设置正确处理锁定和解锁。或者在这种情况下我是否理解“以线程安全的方式”错误?
编辑:我基本上有一个将队列映射到上下文的字典。起初我想使用线程而不是队列,直到我读到这部分:
“注意:您可以使用线程、串行操作队列或调度队列来实现并发性。为简洁起见,本文始终使用“线程”来指代其中的任何一个。” (source)
【问题讨论】:
标签: iphone objective-c ipad core-data grand-central-dispatch