У меня есть класс Obj- C, где у меня есть следующее:
@property (nonatomic, strong) NSString *header;
- (NSString *)doMethodA;
- (NSString *)doMethodB;
- (NSString *)doMethodC;
У меня проблема в том, что я не знаю, какой из этих методов вызывается потребляющим кодом, но что Мне нужно убедиться, что ни один из вызовов doMethod * не возвращается, пока не будет установлен заголовок. конечно наивный способ:
- (NSString *)doMethodA {
while(header == nil) {
}
return @"methodA"
}
Я ищу более элегантное решение. Одна вещь, которую я играл, была примерно такой:
в методе init
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
- (void)setHeader:(NSString *)header {
_header = header;
dispatch_semaphore_signal(semaphore);
}
и в методе:
- (NSString *)doMethodA {
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
return @"methodA"
}
Имеет ли это смысл?