0

我已将 iCloud 集成到我的应用程序中,并且能够将 iCloud 更改成功保存在我的持久存储中。目前,我正在执行以下操作:-

// 我的NSManagedObjectContext(由主线程使用)被声明为NSMainQueueConcurrencyType

  1. 收听 iCloud 通知
  2. 使用将更改合并到主 managedObjectContextperformBlock

我还看到了以下方法:-

// NSManagedObjectContext(由主线程使用)被声明为NSMainQueueConcurrencyType

  1. 在 iCloud 发送通知时执行的方法中创建一个临时托管对象上下文,其NSPrivateQueueConcurrency类型为并发类型
  2. 使主 MOC 作为临时 MOC 的父级
  3. 保存临时 MOC(这会将更改推送到主 MOC)
  4. 使用保存在主 MOC 上performBlock

因此,这两种方法都performBlock用于将更改保存到持久存储中。那么,任何方法都有什么特别的优点/缺点吗?

4

1 回答 1

0

最大限度,

一切都是权衡。使用子 MOC 的最大好处是隐式缓存来自父级的状态,并且保存速度非常快。(它们很快,因为它们只是将数据推送到子父堆栈中。您仍然需要从父级保存数据以保存数据。)

你的架构的缺点是远距离的保存发生在你的主循环上。如果它们花费很多时间,并且有时保存可能会花费过多的时间,那么 UI 响应能力就会受到影响。

在回答您的问题时, -performBlock: 调用不会改变这些事实。他们所做的只是将处理推迟到主循环的下一次迭代。

安德鲁

于 2013-11-02T12:49:24.313 回答