2012-07-20 43 views
2

我是iOS開發新手。我正在編寫一個iOS應用程序,允許用戶讀取/寫入核心數據記錄。這些記錄將通過http同步到服務器。我有一組鏈接(連續)NSOperations運行在執行同步的後臺線程中。前臺和後臺線程的不同ManagedObjectContexts

用戶可以在運行sync的同時讀取/寫入數據。我的計劃是在應用程序中使用兩個managedObjectContext(都使用相同的persistentStoreCoordinator),一個用於前景,另一個用於背景。

我的NSOperations創建的所有後臺線程將連續運行,並將使用後臺MOC。所有基於UI的東西都將使用前景MOC。

我的問題是:這是一個可以接受的iOS核心數據模式?我可以愉快地對這兩個MOC中的相同模型數據庫進行讀取/寫入操作,而不必擔心鎖定和併發問題?

非常感謝。

+0

MOC不是線程安全的,因爲我知道最好的方法是爲每個線程創建單獨的MOC。如果你用這樣我不認爲你會得到任何問題.. – sachin 2012-07-20 13:37:02

+0

我已經在下面添加了一個答案,不知道你是否看到過它? – 2012-07-26 09:04:26

回答

3

這是一種常見的核心數據模式,並且一個框架被設計爲適應。

如果您自己管理線程,則需要使用名爲「線程限制」的技術,您可以在標題爲「與核心數據併發」部分的文檔中閱讀有關該技術的更多信息。

除了線程限制之外,iOS 5.0中還有一些新功能可以幫助管理併發性。 NSManagedObjectContext現在可以配置爲NSManagedObjectContextConcurrencyType。您可以選擇NSMainQueueConcurrencyTypeNSPrivateQueueConcurrencyType

NSMainQueueConcurrencyType的上下文在主線程上運行,可用於爲UI提供服務。使用NSPrivateQueueConcurrencyType的上下文用於後臺任務。

要使用通過performBlock:performBlockAndWait:方法與其交互的私有上下文來確保您的代碼在正確的線程上執行。要使用主隊列上下文,您可以像平常那樣與它交互,或者如果代碼沒有在主線程上運行,則可以使用塊方法。

這些新功能在文檔中沒有詳細討論,「iOS v5.0核心數據發行說明」部分提供了一些信息。但是,WWDC 2012會議視頻中有更深入的討論:「會議214 - 核心數據最佳實踐」。