NSManagedObjectContext子队列与立即执行performblock

时间:2013-11-01 19:56:09

标签: ios core-data icloud nsmanagedobjectcontext

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

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

  1. 收听iCloud通知
  2. 使用performBlock
  3. 将更改合并到主要的managedObjectContext中

    我也看到了以下方法: -

    // NSManagedObjectContext(由主线程使用)声明为NSMainQueueConcurrency类型

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

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

1 个答案:

答案 0 :(得分:0)

最大,

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

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

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

安德鲁