2

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

请注意,似乎有一个实际上与此无关的相关故障单:Multiple contexts in the main thread: why and when use them?此故障单仅讨论一般情况下使用多个上下文以及上下文是什么,并且实际上并未讨论使用多个上下文的任何问题同一个线程。

+0

对于线程安全的coredata对象,每个线程应该有一个上下文。 – Retro 2015-04-02 11:43:56

+0

你从哪里找到这个文档!?我看到很多文档说每个上下文只能在一个线程上访问 - 但这当然与我所要求的相反。我在一个线程上询问多个上下文 - 以便每个上下文只能在创建它的线程上访问 - 但都在同一个线程上。请分享链接!? – 2015-04-03 08:42:25

回答

-1

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

,并期待在这里太

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

如果您选择不使用线程容纳图案 - 也就是说,如果你试图在线程之间传递管理对象或情境,等等你必须非常小心锁定,因此你可能会否定任何你可能从多线程中获得的好处。您还需要考虑:

任何时候您操纵或访问托管对象时,都会使用关联的托管对象上下文。 核心数据不会出现读取“安全”但更改“危险”的情况 - 每个操作都具有“危险”,因为每个操作都具有缓存一致性效果并可能触发故障。

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

+0

你的答案具体谈到使用多个线程。我特别感兴趣的是只使用一个线程。你的答案如何与这个问题相关?我在这里错过了什么? – 2015-04-02 15:10:59

+0

纠正我,如果我错了,但你说“实际上没有讨论在同一个线程上使用多个上下文的任何问题”,所以我试图用一个线程中的多个上下文来解释这个问题。 – Retro 2015-04-02 21:50:54

+0

对不起,但您正在讨论在线程之间传递管理对象。我只谈论使用主线程或一个线程。基本上,我说的不是使用多线程。所以,我没有问过线程安全问题。我问的是避免多个线程,但仍然在一个线程上使用多个上下文。 – 2015-04-03 08:37:02

相关问题