我在我的应用中同时使用CBCentralManager
和CBPeripheralManager
。
我使用PeripheralManager
所做的工作非常简单 - 只需添加一个具有一个可读/通知特性的服务。那就是它。
我通过CentralManager连接到已发现的CBPeripheral,然后取消连接:centralManager.cancelPeripheralConnection(peripheral)
。
我正确地得到了一个委托回调,外围设备已成功断开连接。然后我解除了对CBPeripheral
的所有强引用。
令我感到不安的是,无论如何系统都与外围设备保持连接。我可以在设置应用中看到connected
状态+我的BLE设备表明它仍然连接。
我发现使用内存图工具的是CBPeripheralManager
对某些CBPeripheral有强烈的引用,我相信这是我的设备。
当我在我的应用中禁用CBPeripheralManager
时(我没有添加任何服务),我可以取消与外围设备的连接以实现。
这是一个错误还是一个想要的行为?
答案 0 :(得分:0)
您现在可能已经知道了这一点,但是Apple在取消连接后可以使连接保持一小段时间。
来自他们的documentation:
由于其他应用可能仍与外围设备保持连接,因此取消本地连接并不能保证基础物理链接立即断开。但是,从应用程序的角度来看,外围设备被视为已断开连接,中央管理器对象调用了其委托对象的centralManager:didDisconnectPeripheral:error:方法。