2012-03-07 30 views
2

我想爲主線程使用一個ManagedObjectContext,使用NSOperation爲後臺線程分開一個,就像Apple建議的那樣。而且,每個ManagedObjectContext共享相同的持久性存儲。在覈心數據的後臺線程上使用提取請求

可能會在主線程上發生取數,因爲我使用核心數據填充表視圖。

在後臺中,我需要訪問存儲圖像名稱的NSManagedObject屬性。然後,後臺線程將創建並緩存這些圖像,這是創建後臺線程的主要原因。

鑑於此,如果兩個線程都嘗試訪問持久性存儲,是否存在任何危險(如鎖定),因爲兩者都可能同時從中獲取數據?

回答

0

兩個不同的MOC可以同時訪問相同的PSC進行讀取。

但是,對於寫入,如果存在併發寫入的機會,則需要lockunlock持久性存儲協調器。

+1

好嗎?我在蘋果文檔中沒有讀到任何有關這方面的信息。你能指出我的來源嗎? – 2012-03-08 00:06:42

+0

我從來沒有在文檔中找到它。這是辛苦賺來的經驗和一些長時間的調試會議。如果您將兩個不同的線程不斷寫入此答案中的相同NSPSC – amattn 2012-03-08 00:13:58

+0

示例代碼,則很容易重新生成代碼:http://stackoverflow.com/questions/5236860/app-freeze-on-coredata-save/5237031#5237031 – amattn 2012-03-10 15:14:36

0

只要每個線程使用自己的NSManagedObjectContext,讓它們共享NSPersistentStoreCoordinator是完全安全的。 NSManagedObjectContext將根據需要處理持久存儲的所有適當鎖定。但是,您必須小心,不要在線程之間共享NSManagedObject

1

每個線程都需要自己的託管對象上下文,但所有線程都需要共享一個持久存儲協調器 - 這將處理您描述的潛在問題。請參閱Core Data Concurrency Programming Guide中的其他信息。

相關問題