Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSManagedObjectContext子队列与即时performblock_Ios_Core Data_Icloud_Nsmanagedobjectcontext - Fatal编程技术网

Ios NSManagedObjectContext子队列与即时performblock

Ios NSManagedObjectContext子队列与即时performblock,ios,core-data,icloud,nsmanagedobjectcontext,Ios,Core Data,Icloud,Nsmanagedobjectcontext,我已经将iCloud集成到我的应用程序中,并且我能够将iCloud更改成功地保存在我的永久存储中。目前,我正在做以下工作:- //我的NSManagedObjectContext(由主线程使用)声明为NSMainQueueConcurrencyType 侦听iCloud通知 使用performBlock 我还看到了以下方法:- //NSManagedObjectContext(由主线程使用)声明为NSMainQueueConcurrencyType 在iCloud发送通知时执行的方法中,创建一个

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

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

  • 侦听iCloud通知
  • 使用
    performBlock
  • 我还看到了以下方法:-

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

  • 在iCloud发送通知时执行的方法中,创建一个临时托管对象上下文,其并发类型为
    NSPrivateQueueConcurrency
    type
  • 将主主主运行中心作为临时主运行中心的父级
  • 在临时MOC上保存(这将把更改推送到主MOC)
  • 使用
    performBlock
  • 因此,这两种方法都使用
    performBlock
    将更改保存到持久存储。那么,任何方法都有什么特别的优点/缺点吗

    Max

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

    您的体系结构的缺点是,从远处进行的保存发生在主循环上。如果它们花费了很多时间,并且有时可能会花费过多的时间进行保存,那么用户界面的响应性就会受到影响

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

    安德鲁