我正在嘗試重新創建本可可文章文章(http://www.cocoanetics.com/2012/07/multi-context-coredata/)中描述的三層核心數據系統。我遇到的問題是在自己的後臺線程上創建私有MOC。我沒有太多的多線程經驗,應該如何在目標c中完成。我一直在閱讀文章,並試圖掌握如何正確實施這種方法,但我終於承認,我不知道我在做什麼。創建核心數據寫入的背景線程
要創建這種方法,我需要創建一個NSThread並進行管理嗎?還是有一種我不理解的簡單方法?
我正在嘗試重新創建本可可文章文章(http://www.cocoanetics.com/2012/07/multi-context-coredata/)中描述的三層核心數據系統。我遇到的問題是在自己的後臺線程上創建私有MOC。我沒有太多的多線程經驗,應該如何在目標c中完成。我一直在閱讀文章,並試圖掌握如何正確實施這種方法,但我終於承認,我不知道我在做什麼。創建核心數據寫入的背景線程
要創建這種方法,我需要創建一個NSThread並進行管理嗎?還是有一種我不理解的簡單方法?
在後臺執行核心數據操作的最簡單方法是創建NSPrivateQueueConcurrencyType
的受管對象上下文。這種類型的MOC創建和管理專用隊列。使用performBlock
或performBlockAndWait
在專用MOC上執行操作可確保使用正確的隊列。
Concurrency Support for Managed Object Contexts參見在 爲OS X v10.7的核心數據版本註釋和iOS 5.0對於細節和例子。
我只能推薦觀看WWDC 2011會議303「iOS核心數據的新增功能」中的視頻或幻燈片,其中解釋了核心數據併發性。
管理線程是iOS中
非常基本的要對後臺運行的東西,你這樣做:
- (void)someMethod {
// method is called on main thread normally
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
.... // here things are run in background
});
}
要返回主線程的任何地方,這樣做:
- (void)someOtherMethod {
// method is called on background thread
dispatch_async(dispatch_get_main_queue(), ^{
... // here things are on main thread again
});
}
我仍然想知道的是關於所有這些如何與後臺線程交互?是否使managedObjectContext'NSPrivateQueueConcurrencyType'自動爲其提供一個不在主線程上運行的隊列?我不理解這個設置中的某些東西,它允許主線程在處理核心數據對象時保持空閒狀態。 – TheJer
@TheJer:是的,私人類型的MOC創建它自己的隊列在後臺線程上運行。 –
感謝您解決這個問題。我讀過的所有內容都只是錯過了這個文檔嗎? – TheJer