#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.