Методы блокировки для устанавливаемой переменной - PullRequest
2 голосов
/ 30 апреля 2020

У меня есть класс 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"
    }

Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...