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

How to force a NSOperationQueue runs on one thread?

我正在使用 Realm,我会 get/set 领域对象的 属性 来自不同的操作,这些操作被添加到一个 NSOperationQueue.

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

我该如何解决这个问题?任何建议将不胜感激。

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

您可以通过两种方式处理此问题:

1.使操作队列串行化。 将队列的maxConcurrentOperationCount 属性设置为1,这样即使同时将操作加入队列,也只会是按照添加的顺序执行。

2。使 operation1 依赖于 operation0. 如果需要保持操作队列并发,可以使用 NSOperation.addDependency(_:) 明确确保 operation1 只会开始一旦 operation0 完成。

operation1 中,请确保您在用于获取 Realm 对象的 Realm 对象上调用 refresh(),以确保您在operation0 已在该队列中正确公开。