Синхронизировать версию асинхронного метода в Obj-C - PullRequest
2 голосов
/ 23 марта 2011

Какой лучший способ сделать синхронную версию асинхронного метода в Objective-C (для iOS, если это имеет значение)?

Скажем, у вас есть класс с этими двумя методами:

- (void) asyncDoSomething; // Starts an asynchronous task. Can't be changed.
- (void) onFinishDoSomething; // Called when the task is finished 

Как бы вы реализовали синхронный doSomething, который не возвращается, пока задача не будет завершена?

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Хорошо, так что вы можете объявить глобальное логическое значение, которое скажет вам продолжить или ждать, непосредственно перед вызовом вашего - (void)asyncDoSomething; метода, вы устанавливаете BOOL wait на YES и после того, как вы делаете метод

while (wait) {
    [NSThread sleepForTimeInterval:1];
}

, чтобы дождаться вашего ответа, и в вашем асинхронном обратном вызове - (void)onFinishDoSomething; вы устанавливаете логическое значение на NO;

Таким образом, ваш метод по-прежнему называется асинхронным, но код после не выполняется перед ответом. Он будет ждать, как если бы он был синхронным.

0 голосов
/ 23 марта 2011

Перейдите к реализации asyncDoSomething и удалите код обратного вызова NSThread / NSOperation /.

...