У меня проблемы с использованием dispatch_async.В главном потоке приложений / пользовательском интерфейсе я вызываю dispatch_async в глобальной очереди и приказываю ему выполнить какой-либо вызов функции с обработчиком завершения.Я ожидаю, что обработчик завершения будет вызван, но иногда он не появляется.
dispatch_queue_t hiq = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(hiq, ^(void){
[object doSomethingAndThenCompletionHandler:^(){
//Do some stuff because I'm done
}];
});
Что интересно, я делаю это в ответ на controlTextDidChange всякий раз, когда я набираю что-то в текстовое поле. Когда я щелкаю из текстового поля, все обработчики завершения запускаются сразу.
Я предполагаю, что все мои обработчики завершения попадают в очередь за чем-то в цикле выполнения, а затемкогда мой элемент интерфейса теряет фокус, это освобождает очередь.Мне не хватает эксперта по циклам выполнения, чтобы знать, что именно происходит, когда я набираю текстовое поле или комбинированный список, но, возможно, он связывает цикл запуска?
РЕДАКТИРОВАТЬ: я думаю, что это связано срежим цикла выполнения, потому что когда я распечатываю режим цикла выполнения, он печатается как NULL, за исключением обработчика завершения, когда он выводится как режим по умолчанию.Я использую поле со списком, и проблема возникает только тогда, когда поле со списком открыто и раскрыто. UIScrollView блокирует цикл выполнения? Я думаю, что это может быть связано с этой проблемой.Что вы, ребята, думаете?