0

我注意到 Corebluetooth 库正在主线程上运行,它似乎冻结了 viewController 的 UI。为了解决这个问题,我想通过调用这个函数将 CoreBluetooth 委托放在一个单独的线程(后台线程)中。

[self performSelectorInBackground:@selector(peripheralbackground:) withObject:_peripheral];

它确实产生了一个运行选择器的新线程,看起来像这样..

- (void)peripheralbackground:(CBPeripheral *)per {
    [per setDelegate:self];
    [per discoverServices:[serviceNames allKeys]];
}

本质上,我希望在主 UI 线程之外的单独线程上调用回调。任何想法将不胜感激....谢谢

更新:

我在回调中使用了以下内容;但是,我在功能块中遇到了一些并发问题......当我们将工作卸载到后台线程时,我认为一切都应该在某种类型的 FIFO 队列中。我绝对可以看到这些线程肯定是相互交织的..

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{}

我想将工作从后台线程卸载,但以串行队列类型的方式运行。

世界上到底发生了什么:(

4

0 回答 0