这个问题基本上涵盖了所有内容。如果我将N个块放入NSManagedObjectContext的队列中,它们是否保证按顺序执行,还是有可能会出现乱序的情况?
这个问题基本上涵盖了所有内容。如果我将N个块放入NSManagedObjectContext的队列中,它们是否保证按顺序执行,还是有可能会出现乱序的情况?
我认为NSManagedObjectContext内部会使用GCD,而且GCD队列是严格先进先出的。当然我无法证实这一点,但对我来说完全合理,因为performBlock
的目标是线程安全,在给定上下文中一次只执行一个操作,而且如果已经存在一个完美的功能性系统(GCD),那么为什么苹果还要从头开始编写一个呢。
.PrivateQueueConcurrencyType
类型创建一个MOC - 基本上是一个临时的MOC,那么它就是并发的,虽然它们开始是按照FIFO顺序进行的,但它们不会以相同的顺序完成,只有在performBlock
中才可能发生这种情况,而我也遇到了这种情况。我将一个保存块排队到最后,但是其他一些块最后完成了,这给我带来了麻烦。 - János