Swift: elija la queue para el administrador central de Bluetooth

Estoy trabajando en la aplicación que se conectará con un dispositivo inteligente a través de BLE y se comunicará con él.

La pregunta es: ¿en qué queue es la mejor práctica para manejar los events de bluetooth?

He leído muchos tutoriales y en todos he encontrado esto:

centralManager = CBCentralManager(delegate: self, queue: nil) 

Eligen manejar events bluetooth en la queue principal ( queue: nil ), pero supongo que no es una buena práctica. Debido a que podría ser una gran cantidad de consultas enviar a dispositivo periférico desde central y muchas respuestas enviadas desde periférico a central.

Supongo que esta podría ser la razón por la que la aplicación funciona lentamente y podría afectar negativamente a la productividad, ¿estoy en lo cierto?

¿Esto inundará la queue de actualización de la UI?

Estoy usando dispatch_get_global_queue (QOS_CLASS_BACKGROUND, 0) para CBCentralManager durante algún time en mis proyectos de Bluetooth y está funcionando a la perfección.

Todos los methods delegates serán entregados a la queue que especifique. Si haces algunas operaciones muy livianas con estos methods, supongo que podrías mantener la queue principal. Pero es mejor usar una queue de background.

Desde la perspectiva de Bluetooth, no creo que los events sean una buena práctica; excepto que desea retrasar el envío de posts.

Definitivamente, debe utilizar una queue separada para CBCentralManager y, preferiblemente, también usarla para toda la comunicación con el object CBPeripheral , de modo que su queue principal no se bloquee.

dispatch_async los events en su queue no debería ser un problema, siempre y cuando las requestes de lectura / escritura no se demoren.