2010-03-16 40 views
0

我從Web服務獲取一些數據並將其保存在覈心數據中。這個工作流程是這樣的:如何在Core Data中使用多線程保存對象?

  1. 獲取XML提要
  2. 每一個項目去了在飼料,每一個信息源項目創建一個新的ManagedObject
  3. 下載的每個項目的一些大的二進制數據,並將其保存到ManagedObject
  4. 呼叫[managedObjectContext保存:]

現在的問題是當然的性能 - 一切都在主線程上運行。我想盡可能地重新考慮另一個線索,但我不確定我應該從哪裏開始。將一切(1-4)都放到單獨的線程中是否可以?

回答

2

是的,我建議在多線程核心數據上查看Apple的文檔以及我在MDN(Mac Developer Network)http://www.mac-developer-network.com/columns/coredata/may2009/上的文章,其中討論了您需要避免的事情以及如何設置所有內容。

順便說一句,將大量的二進制數據保存到核心數據對象通常是一個壞主意。規則雲:

  • < 100KB保存在實體
  • < 1MB保存在一個單獨的實體掛在關係
  • 1MB保存到磁盤,其路徑存儲到被管理對象

因此,您可以將二進制數據的下載分離爲單獨的線程,sav將它們存入磁盤,然後告訴主線程引用對象的NSManagedObjectID和路徑,並讓主線程執行非常快速和容易的鏈接。這將讓你的核心數據實現保持單線程,並且只能分離數據下載。

相關問題