串行异步操作队列
什么是OperationQueue
从Apple文档
操作队列 根据它们的优先级和准备情况 执行其排队的 Operation
对象。 在将操作添加到操作队列之后,该操作将保留在其队列中,直到它报告完成任务为止。 添加操作后,您无法直接从队列中删除该操作。
OperationQueue具有一个名为maxConcurrentOperationCount
的属性,您可以将其设置为1,以使串行 OperationQueue在操作为同步操作时可以完美地工作。
问题
当我想要将其发送到蓝牙时,检测到传感器框架之间存在干扰。 发生了什么事!🤔我们使用很多“ @synthesize”关键字来确保线程安全并防止传感器线程之间的任何干扰。 然后我寻找最佳解决方案,最后我找到了maxConcurrentOperationCount
I 那就是我需要的,它将解决我的问题
我开始重构1Sheeld的代码以使用maxConcurrentOperationCount.
不幸的是,干扰仍然发生。 我相信在文档中只能同时执行一个操作,但这并不是为什么。
如果操作同步,则 maxConcurrentOperationCount
可以完美地工作,但是如果该操作是异步的(例如调用API请求或使用蓝牙发送数据),则该操作将无用。
那简单的代码显示了问题
创建操作