// Method called when a button is clicked
- (void)handleClickEvent {
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self backgroundProcessing];
});
// Some code to update the UI of the view
....
[self updateUI];
....
}
1) handleClickEvent вызывается в главном потоке при нажатии кнопки в представлении.
2) Я использовал dispatch_sync (), потому что следующий код, который обновляет пользовательский интерфейс представления, не может бытьделается до тех пор, пока не будет вычислена переменная в методе backgroundProcessing.
3) Я использовал dispatch_get_global_queue для того, чтобы получить backgroundProcessing из основного потока.(следуя правилу: обычно помещают фоновую обработку из основного потока и обычно помещают код, который влияет на пользовательский интерфейс в основном потоке).
Мой вопрос таков: метод backgroundProcessing "вешает" основной поток до его завершения?так как я использую dispatch_sync?
РЕДАКТИРОВАТЬ: Основываясь на ответе ниже, я реализовал это решение:
- (void)handleClickEvent {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self backgroundProcessing];
dispatch_async(dispatch_get_main_queue(), ^{
[self updateUI];
});
});
}
решение по этой ссылке: Завершение Callbaks