Использование методов делегирования с семафорами в Objective C

#ios #objective-c #multithreading #delegates #semaphore

#iOS #objective-c #многопоточность #делегаты #семафор

Вопрос:

Привет, я использую методы делегирования в Objective C и нуждаюсь в некоторой помощи. У меня есть следующие функции A и B. B — это функция делегирования.

 -(BOOL) A{
    int cmd = 73;
    [_serialPort sendData:cmd];
    NSLog("Hello");
    return TRUE;
}

//Delegate function

-(void) B{
    //When some data is received on the serial port function B is called
}
  

Но функция A не ожидает, пока данные не будут получены на последовательный порт. Как мне заблокировать функцию A до тех пор, пока на последовательный порт не поступят некоторые данные? Я использую библиотеку ORSSerialPort в objective-C.

Комментарии:

1. Блокировка в любом случае плохая идея. Обычно вы просто обрабатываете входящие данные асинхронно с помощью вашего метода делегирования

2. @ZaidPathan Да, когда я хочу отправить данные через последовательный порт, я вызываю функцию A.

3. Где вы вызываете метод A ?

4. Вы должны вызывать метод A из B , когда вызывается делегат.

Ответ №1:

Похоже, что ORSSerialPort уже использует делегат для получения данных.

 - (void)serialPort:(ORSSerialPort *)serialPort didReceiveData:(NSData *)data {
    // Assuming the delegate has method A
    [self A];
}
  

-serialPort:didReceiveData: является методом делегирования из ORSSerialPort.

Приведенный выше код в основном будет ждать, пока данные не будут получены, а затем, как только это произойдет, он вызовет A.