CoreBluetooth 代表主队列/主线程?

Posted

技术标签:

【中文标题】CoreBluetooth 代表主队列/主线程?【英文标题】:CoreBluetooth delegates on main queue/main thread? 【发布时间】:2012-10-22 17:41:46 【问题描述】:

在 CBCentralManager 的初始化程序中指定了一个队列,-initWithDelegate:queue:

从性能的角度来看,将核心蓝牙委托安排到后台线程/队列是否更好?是否进行 UI 操作,例如跟踪平移或缩放手势,干扰蓝牙?

【问题讨论】:

好问题。我从没想过使用另一个队列,但我注意到我能获得的最快消息发送频率约为 50 Hz(每 20 毫秒);比这更快,它似乎要排队。 我在使用 External Accessory 框架处理之前的项目时第一次注意到这一点。我只是想知道使用 Core Bluetooth 是否也很重要。 【参考方案1】:

异步回调的重点是不需要安排它们,因为它们会在繁重的工作结束时被调用...当然,当您的委托方法很繁重时,这将不再起作用,并且移动确实有意义他们到不同的队列:)

或者如果它们每秒被调用 10000 次。但除此之外,我认为他们不需要移出主队列

【讨论】:

你似乎没有理解我的担忧。如果您将一些异步回调调度到主线程,并且当一些 UI 事物(例如,平移、拖动、缩放、可能处于事件跟踪运行循环模式的事件)占用主线程时,您的回调将被延迟,直到这些 UI 事件完成。 为什么?它们长且阻塞吗?不这么认为..你是对的我确实理解你错了^^但现在看来..更奇怪:D你的意见操作不应该阻止 @ZhangChn:你能解决你的问题吗?我也在经历同样的问题。我可以在单独的线程上设置 corebluetooth 委托,但它仍在主线程中调用......奇怪。【参考方案2】:

根据您使用 CoreBluetooth 的方式,每秒可能会有很多回调,因此我强烈建议创建一个专用(串行)调度队列以协调方式处理它们。

【讨论】:

以上是关于CoreBluetooth 代表主队列/主线程?的主要内容,如果未能解决你的问题,请参考以下文章

IOS 主队列,全局队列的关系

GCD主队列是不是必须在主线程上执行?

iOS 主线程和主队列

我们是不是需要在主线程或主队列中更新 UI?

GCD - 如何在主线程上等待在主队列上执行的异步回调

为啥 NSManagedObjectContext 队列在主线程上执行?