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

相關問題