如何在一个线程上强制运行NSOperationQueue?

时间:2017-02-10 05:56:16

标签: realm nsoperationqueue

我正在使用Realm,我会从不同的操作中获取/设置realm对象的属性,这些操作会添加到一个NSOperationQueue

假设在operation0中,我将realm对象的属性设置为新值,然后我将operation1添加到同一个操作队列,operation1获取realm对象的属性,该属性可能获得旧值,因为线程运行operation1可能与operation0。

我该如何解决这个问题?任何建议都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

听起来你需要保证operation1只有在operation0成功完成设置Realm写入事务后才会开始执行。

有两种方法可以解决这个问题:

<强> 1。使操作队列成为串行。将队列的maxConcurrentOperationCount属性设置为1,这样即使您同时向队列添加操作,它们也只能在它们被添加的顺序。

<强> 2。使operation1依赖于operation0。如果您需要将操作队列保持并发,则可以使用NSOperation.addDependency(_:)明确确保operation1仅开始一次operation0已完成。

operation1中,请务必致电您Realm对象上的refresh()以获取您的Realm对象,以确保您所做的更改operation0已在该队列中正确公开。