当我使用以下方法扫描2个具有单个服务和特征的外围设备(cServiceArray
是两个服务CBUUID的NSArray时):
[self.centralManager scanForPeripheralsWithServices:cServiceArray options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @NO }];
我收到以下控制台响应:
2013-10-18 13:58:37.069 BlueMarco[1137:60b] didDiscoverPeripheral peripheral description <CBPeripheral: 0x14e799d0 identifier = 33C98AC7-E25E-0803-82D2-326FC8C0FDB1, Name = "ICServer_2", state = disconnected>
...
2013-10-18 13:58:37.072 BlueMarco[1137:60b] didDiscoverPeripheral Connecting to peripheral ICServer_2
...
2013-10-18 13:58:37.076 BlueMarco[1137:60b] didDiscoverPeripheral peripheral description <CBPeripheral: 0x14e75b60 identifier = E634E343-0DCF-3A4F-1F88-D4C87EA731EA, Name = "ICServer_1", state = disconnected>
...
2013-10-18 13:58:37.079 BlueMarco[1137:60b] CoreBluetooth[WARNING] <CBPeripheral: 0x14e799d0 identifier = 33C98AC7-E25E-0803-82D2-326FC8C0FDB1, Name = "ICServer_2", state = connecting> is being dealloc'ed while connecting
2013-10-18 13:58:37.080 BlueMarco[1137:60b] didDiscoverPeripheral Connecting to peripheral ICServer_1
这表示当我连接到第二台服务器时,与一个外围设备的连接断开。这是预期的行为吗?如果是这样,为什么方法scanForPeripheralsWithServices
允许NSArray服务CBUUID作为参数?如果没有,有人可以告诉我如何扫描和处理多种服务的接收吗?
答案 0 :(得分:1)
显示CoreBluetooth[WARNING]
的行表示您没有对相关的CBPeripheral对象保留强引用,因此即使正在进行连接操作,它也会被取消分配。
确保只要您使用CBPeripheral,就可以对其进行强有力的引用,否则系统会自动对其进行垃圾回收。在Core Bluetooth Programming Guide中可能没有强调这一点,但这是正确操作的必要条件。