NSManagedObjectContext的performBlock方法保证操作顺序吗?

3

这个问题基本上涵盖了所有内容。如果我将N个块放入NSManagedObjectContext的队列中,它们是否保证按顺序执行,还是有可能会出现乱序的情况?

1个回答

3

我认为NSManagedObjectContext内部会使用GCD,而且GCD队列是严格先进先出的。当然我无法证实这一点,但对我来说完全合理,因为performBlock的目标是线程安全,在给定上下文中一次只执行一个操作,而且如果已经存在一个完美的功能性系统(GCD),那么为什么苹果还要从头开始编写一个呢。


1
依赖项是在使用多个队列时使用的。关于这个主题的每一篇文献和视频都说队列本身是FIFO的。然而,并发队列可能会以看似随机的顺序完成任务,因为它们将并行执行,但它们将按FIFO顺序启动。鉴于其目标仅在任何给定时间执行一个操作,这种类型的队列不适用于托管对象上下文。 - borrrden
那我想我真的误解了我在这个主题上所读的内容。是时候重新阅读参考资料了。不过...也许我被队列能够运行多个并发操作的能力所困惑了,如果一个操作依赖于前面的操作,那么依赖关系就有意义了... - RonLugge
1
我认为如果你使用.PrivateQueueConcurrencyType类型创建一个MOC - 基本上是一个临时的MOC,那么它就是并发的,虽然它们开始是按照FIFO顺序进行的,但它们不会以相同的顺序完成,只有在performBlock中才可能发生这种情况,而我也遇到了这种情况。我将一个保存块排队到最后,但是其他一些块最后完成了,这给我带来了麻烦。 - János

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接