CBPeripheralManager防止外围设备断开连接

时间:2017-12-27 20:55:21

标签: ios bluetooth core-bluetooth cbperipheral

我在我的应用中同时使用CBCentralManagerCBPeripheralManager。 我使用PeripheralManager所做的工作非常简单 - 只需添加一个具有一个可读/通知特性的服务。那就是它。

我通过CentralManager连接到已发现的CBPeripheral,然后取消连接:centralManager.cancelPeripheralConnection(peripheral)。 我正确地得到了一个委托回调,外围设备已成功断开连接。然后我解除了对CBPeripheral的所有强引用。

令我感到不安的是,无论如何系统都与外围设备保持连接。我可以在设置应用中看到connected状态+我的BLE设备表明它仍然连接。

我发现使用内存图工具的是CBPeripheralManager对某些CBPeripheral有强烈的引用,我相信这是我的设备。 当我在我的应用中禁用CBPeripheralManager时(我没有添加任何服务),我可以取消与外围设备的连接以实现

这是一个错误还是一个想要的行为?

1 个答案:

答案 0 :(得分:0)

您现在可能已经知道了这一点,但是Apple在取消连接后可以使连接保持一小段时间。

来自他们的documentation

由于其他应用可能仍与外围设备保持连接,因此取消本地连接并不能保证基础物理链接立即断开。但是,从应用程序的角度来看,外围设备被视为已断开连接,中央管理器对象调用了其委托对象的centralManager:didDisconnectPeripheral:error:方法。