Итак, у меня есть класс-оболочка, который при отправке ему сообщения возвращает ДА / НЕТ в зависимости от того, ПОЛУЧИЛ ли внутренний объект сообщение. То есть, когда я отправляю это, оно фактически не возвращается, когда задача выполнена. Я также хочу убедиться, что одновременно выполняется только одна задача, поэтому я использую семафоры диспетчеризации. Мой класс-оболочка вызывает метод делегата, чтобы уведомить меня, что он завершил обработку внутренней задачи.
dispatch_queue_t queue = dispatch_queue_create("com.test.all", 0); // private queue
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1); // one at a time
...
- (void)doStuff:(NSString *)stuff {
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_sync(queue, ^(void) {
[myWrapperObject sendRequestToInternalStuff:stuff];
}
}
...
- (void)myWrapperClassProcessingIsDone {
dispatch_semaphore_signal(semaphore);
}
Это не работает и зависает. Как я могу реализовать что-то подобное без зависания?