2016-07-15 7 views
4

Я работаю над приложением, которое будет подключаться к смарт-устройству через BLE и связываться с ним.Swift: выберите очередь для менеджера Bluetooth Central

Вопрос: В какой очереди лучше всего справляться с событиями bluetooth?

Я читал много учебников и во всех из них я нашел это:

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

Они выбирают для обработки блютус события в основной очереди (queue: nil), но я полагаю, что это не так хорошая практика. Потому что может быть много запросов, отправляемых на периферийное устройство из центра, и множество ответов отправляются от периферийного к центральному.

Я предполагаю, что это может быть причиной того, что приложение работает медленно и может негативно повлиять на производительность, верно?

Будет ли это наводнять очередь обновления пользовательского интерфейса?

+0

В примере из raywenderlich я нахожу это: 'пусть centralQueue = dispatch_queue_create ("com.raywenderlich", DISPATCH_QUEUE_SERIAL)' ' centralManager = CBCentralManager (делегат: самостоятельная, очередь: centralQueue)' ли это мочалка решение? –

+0

Можете ли вы поделиться ссылкой? – antonio081014

ответ

2

Я использую dispatch_get_global_queue (QOS_CLASS_BACKGROUND, 0) для CBCentralManager в течение некоторого времени в моих проектах Bluetooth и работает безупречно.

Все методы делегата будут доставлены в указанную вами очередь. Если вы выполняете очень легкие операции над этими методами, я думаю, вы могли бы сохранить основную очередь. Но лучше использовать фоновую очередь.

0

С точки зрения Bluetooth, я не думаю, что события в очереди - это лучшая практика; за исключением того, что вы хотите отложить отправку сообщений.

1

Вы должны обязательно использовать отдельную очередь для CBCentralManager и предпочтительно использовать ее для всего сообщения с объектом CBPeripheral - поэтому ваша основная очередь не блокируется.

dispatch_async событий в очереди не должно быть проблемой - если запросы на чтение/запись не задерживаются.