Swift:为Bluetooth Central Manager选择队列

Gus*_*ava 5 queue grand-central-dispatch ios core-bluetooth swift

我正在开发将通过BLE与智能设备连接并与其通信的应用程序。

问题是:处理蓝牙事件的最佳实践在哪个队列中?

我阅读了很多教程,在所有教程中我都发现了这一点:

centralManager = CBCentralManager(delegate: self, queue: nil)
Run Code Online (Sandbox Code Playgroud)

他们选择处理主队列queue: nil)中的蓝牙事件,但我认为这不是一个好习惯。因为可能有很多查询从中央设备发送到外围设备,并且有很多答案从外围设备发送到中心设备。

我认为这可能是应用程序运行缓慢的原因,并且可能会对生产力产生不利影响,对吗?

这会淹没UI更新队列吗?

vla*_*dan 4

我在我的蓝牙项目中为 CBCentralManager 使用dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0) 一段时间,并且它工作完美。

^ 从头开始​​。我不建议使用全局队列。原因是全局队列是并发队列,而您可能需要串行队列。创建一个新的DispatchQueue(label: "CentralManager")并将其传递给CBCentralManager.

所有委托方法都将传递到您指定的队列。如果您对这些方法进行一些非常轻的操作,我想您可以保留主队列。但最好使用后台队列。