0

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

4

2 回答 2

3

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

与核心数据的并发性

于 2013-01-19T14:10:22.353 回答
1

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

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

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

于 2013-01-19T18:45:13.387 回答