使用CoreData可以在同一个线程上拥有多个上下文吗?

时间:2015-04-02 11:38:43

标签: ios objective-c multithreading core-data nsmanagedobjectcontext

使用CoreData,可以在同一个线程上拥有多个上下文吗?在工作中,我们正在讨论在主线程上有多个上下文是否会导致死锁。我找不到任何理由不这样做,但我担心当其中一个主线程上下文保存并合并到另一个主线程上下文时,它可能会导致死锁。

请注意,似乎存在一个实际上根本不相关的相关票证:Multiple contexts in the main thread: why and when use them?此票证仅讨论一般使用多个上下文,以及上下文是什么,并且实际上并未讨论使用中的任何问题同一个线程上的多个上下文。

1 个答案:

答案 0 :(得分:-1)

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html

也在这里看

http://www.cocoanetics.com/2012/07/multi-context-coredata/

如果您选择不使用线程包含模式 - 也就是说,如果您尝试在线程之间传递托管对象或上下文,等等 - 您必须非常小心锁定,因此您可能会否定您可能从多线程中获得的任何好处。您还需要考虑:

每次操作或访问托管对象时,都使用关联的托管对象上下文。 核心数据不会出现读取“安全”但变化“危险”的情况 - 每次操作都是“危险的”,因为每个操作都有缓存一致性影响并且可能触发故障。

托管对象本身不是线程安全的。 如果要跨不同线程使用托管对象,则必须锁定其上下文。