【问题标题】:Does NSManagedObjectContext's performBlock method guarantee the order of operations?NSManagedObjectContext 的 performBlock 方法是否保证操作的顺序?
【发布时间】:2012-09-06 02:41:08
【问题描述】:

这个问题几乎涵盖了所有内容。如果我将 N 个块放入 NSManagedObjectContext 的队列中,它会按顺序执行它们吗,有保证,还是有可能其中一些可能会被打乱?

【问题讨论】:

    标签: objective-c ios xcode core-data


    【解决方案1】:

    我看不出为什么 NSManagedObjectContext 不会在内部使用 GCD,而且 GCD 队列是严格的 FIFO。当然,我没有证据来证实这一点,但这对我来说非常有意义,因为performBlock 的目标是线程安全,并且在给定的上下文中一次只执行一个操作,为什么 Apple 会费心从当一个完美功能的 (GCD) 已经存在时,就开始了。

    【讨论】:

    • 依赖关系适用于使用多个队列的情况。关于这个主题的每一篇文献和视频都说队列本身是先进先出的。但是,并发队列可能会以看似随机的顺序完成任务,因为它们将并行执行,但它们将在 FIFO 中开始。但是,这种类型的队列不适合托管对象上下文,因为它的目标是在任何给定时间只执行一个操作。
    • 那么我想我真的误解了我在这个主题上阅读的内容。是时候重新阅读参考文献了。虽然......也许我对队列运行多个并发操作的能力感到困惑,如果一个操作依赖于先前的操作,这将使依赖关系变得有意义......
    • 我想如果你创建一个 .PrivateQueueConcurrencyType 类型的 MOC - 所以基本上是一个临时的 MOC,然后它是并发的,虽然它们以 FIFO 开始,但它们不会以相同的顺序完成,而只是对于performBlock,它会发生吗,它也发生在我身上。我最后一个 save 块入队,但其他块最后完成,这给我带来了麻烦。
    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2018-06-03
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多