如果一个NSManagedObjectContext实例同时保存在两个线程中怎么办?

时间:2013-01-19 14:05:34

标签: ios core-data

在我的应用程序中,我创建了一个NSManagedObjectContext实例,两个线程可以访问此实例,他们都需要提交更改。如果在两个线程中同时调用save方法怎么办?上下文中所有NSManagedObject实例的属性会发生什么?

2 个答案:

答案 0 :(得分:3)

你不应该这样做。为每个thread.CoreData创建两个单独的NSManagedObjectContext不是线程安全的..在使用CoreData进行多线程处理之前阅读本文档

Concurrency with Core Data

答案 1 :(得分:1)

NSPersistentStoreCoordinator将在多个线程或队列上处理NSManagedObjectContexts的正确锁定,但NSManagedObjectContext本身应该只在一个线程上使用,它创建的线程(常见的错误是在主线程上创建一个MOC然后将其传递给另一个线程 - 不要这样做。)

正如Tony指出的那样,你想要为每个线程拥有一个MOC,共享一个持久存储协调器,或者使用iOS 5中引入的核心数据的新并发模式,允许你创建子上下文和/或使用新的performBlock和performBlockAndWait方法,保证上下文在正确的线程上执行。

直接回答你的问题是“谁知道”。行为将是未定义的,您几乎肯定会遇到随机崩溃和/或死锁。