使用GCD,块和信号量将异步调用转为同步

时间:2015-12-22 09:36:20

标签: ios objective-c-blocks grand-central-dispatch semaphore core-bluetooth

我使用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,特别是块和信号量。

不幸的是,这些概念对我来说很难理解。我开始关注这个主题的教程,但我无法设法让它满足我的需求。所以我请你帮忙。

0 个答案:

没有答案