我使用CoreBluetooth
框架编写了一个静态库,以便与Bluetooth Low Energy自定义设备连接和交换数据。每个设备都引用CBPeripheral
处理的CBPeripheralManager
实例。目前我在扫描后使用以下方法连接到我的设备
- (void)connectPeripheral:(CBPeripheral *)peripheral {
// Connects with the peripheral
[manager connectPeripheral:peripheral options:nil];
}
connectPeripheral:
方法是异步的,并且在建立连接后使用委托模式执行适当的操作。使用我的库的开发人员通过通知获得有关连接的通知
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {
NSLog(@"Peripheral connected");
// Start discovering services matching my UUIDs
[[NSNotificationCenter defaultCenter] postNotificationName:@"BLEDeviceConnected" object:nil];
}
这种机制有一个缺点:我必须告诉开发人员使用我的库通知的名称,以便他/她可以注册到它。我宁愿在另一个线程上构建一个运行connectPeripheral:
方法的同步方法,并阻止执行直到设备没有连接。为了达到这个目的,我想使用Grand Central Dispatch,特别是块和信号量。
不幸的是,这些概念对我来说很难理解。我开始关注这个主题的教程,但我无法设法让它满足我的需求。所以我请你帮忙。