2016-07-15 3 views
4

BLE를 통해 스마트 장치에 연결하여 통신 할 앱에서 작업하고 있습니다.스위프트 : 블루투스 중앙 관리자 용 큐를 선택하십시오.

질문 : 블루투스 이벤트를 처리하는 가장 좋은 방법은 어떤 큐입니까?

나는 자습서 많이 읽은 그들 모두에서 내가 발견이 :

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

그들은 주요 큐 (queue: nil)에 블루투스 이벤트를 처리하도록 선택,하지만 난 그게 아니라고 생각 좋은 연습. 중앙에서 주변 장치로 많은 쿼리를 보낼 수 있고 주변 장치에서 중앙으로 많은 응답을 보낼 수 있기 때문입니다.

나는 이것이 응용 프로그램이 천천히 작동하는 이유라고 생각하고 생산성에 불리한 영향을 미칠 수 있다고 생각합니까?

이 업데이트가 UI 업데이트 대기열에 있습니까?

+0

내가 발견이 : 'centralQueue = dispatch_queue_create ("com.raywenderlich", DISPATCH_QUEUE_SERIAL)' 'centralManager = CBCentralManager하자 (대표 : 자기, 큐 : centralQueue)' 그것이 인피 솔루션을? –

+0

링크를 공유 할 수 있습니까? – antonio081014

답변

2

블루투스 프로젝트에서 CBCentralManager에 대해 dispatch_get_global_queue (QOS_CLASS_BACKGROUND, 0)를 사용하고 있으며 완벽하게 작동합니다.

모든 대리자 메서드는 지정한 대기열로 전달됩니다. 이 방법들에 대해 매우 가벼운 작업을한다면, 메인 큐를 유지할 수있을 것입니다. 그러나 배경 대기열을 사용하는 것이 좋습니다. raywenderlich의 예에서

0

블루투스의 관점에서 볼 때 대기열 이벤트가 가장 좋은 방법이라고 생각하지 않습니다. 보내는 메시지를 지연시키려는 경우는 예외입니다.

1

CBCentralManager에는 별도의 대기열을 사용하고 CBPeripheral 개체와의 모든 통신에는이 대기열을 사용하는 것이 좋습니다. 따라서 메인 대기열이 차단되지 않습니다.

dispatch_async 대기열에 대한 이벤트는 읽기/쓰기 요청이 지연되지 않는 한 문제가되지 않아야합니다.