【问题标题】:How to save objects using Multi-Threading in Core Data?如何在 Core Data 中使用多线程保存对象?
【发布时间】:2010-03-16 23:27:53
【问题描述】:

我正在从 Web 服务获取一些数据并将其保存在核心数据中。此工作流程如下所示:

  1. 获取 xml 提要
  2. 检查该提要中的每个项目,为每个提要项目创建一个新的 ManagedObject
  3. 为每个项目下载一些大的二进制数据并将其保存到 ManagedObject
  4. 调用 [managedObjectContext 保存:]

现在,问题当然是性能 - 一切都在主线程上运行。我想尽可能多地重新考虑另一个线程,但我不确定我应该从哪里开始。可以将所有内容(1-4)放到单独的线程中吗?

【问题讨论】:

    标签: iphone cocoa-touch multithreading core-data


    【解决方案1】:

    是的,我建议您查看 Apple 关于多线程核心数据的文档和我在 MDN(Mac 开发者网络)http://www.mac-developer-network.com/columns/coredata/may2009/ 上的文章,其中讨论了您需要避免的事情以及如何设置所有内容。

    顺便说一句,将大量二进制数据保存到 Core Data 对象中通常是个坏主意。规则是:

    • 1MB 保存到磁盘并将其路径存储到托管对象中

    因此,您可以将二进制数据的下载分拆到单独的线程中,将它们保存到磁盘,然后告诉主线程引用对象的NSManagedObjectID 和路径,让主线程快速轻松地完成链接。这将使您的 Core Data 实现保持单线程,并且只分拆数据下载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      相关资源
      最近更新 更多