如何强制 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
已在该队列中正确公开。
我正在使用 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
已在该队列中正确公开。