我在我的应用程序中同时使用了CBCentralManager和CBPeripheralManager。我使用PeripheralManager所做的工作很简单--它只是添加了一个具有可读性/通知特性的服务。就这样。
我通过CentralManager连接到已发现的CentralManager,然后取消连接:centralManager.cancelPeripheralConnection(peripheral)。我正确地得到了一个委托回调,外设被成功地断开了。然后,我删除了对该CBPeripheral的所有强烈引用。
困扰我的是,系统始终保持着与外围设备的连接。我可以在“设置”应用程序+我的connected设备中看到它的状态,这表明它仍在连接。
我使用内存图形工具发现的是,CBPeripheralManager对某些CBPeripheral有很强的引用,我认为这是我的设备。当我在我的应用程序中禁用CBPeripheralManager (没有向它添加任何服务)时,我就可以真正取消到外围设备的连接。
这是一种错误还是一种理想的行为?
发布于 2018-08-20 01:40:28
到现在为止,你可能已经知道了这一点,但是苹果公司在取消连接后的一段短时间内保持连接正常。
从他们的文档
由于其他应用程序可能仍然与外围设备有连接,取消本地连接并不能保证底层物理链接立即断开。然而,从应用程序的角度来看,外围设备被认为是断开的,中央管理器对象调用它的委托对象的中央管理器:ddDisconnect外设:error:方法。
https://stackoverflow.com/questions/47998550
复制相似问题