Есть много возможностей, как это реализовать. Все они сосредоточены на отслеживании того, какие процессы завершены. Лучший способ зависит от того, как реализованы ваши фоновые процессы.
Если вы используете NSOperationQueue, вы можете добавить третью операцию, которая имеет две другие операции в качестве зависимости. Таким образом, вам вообще не придется заботиться об уведомлениях.
В противном случае вы можете подсчитать, сколько операций завершено, и выполнить свой код, когда счетчик достигнет нужного значения. GCD имеет группы диспетчеризации как хорошую абстракцию для этого.
Сначала вы создаете группу рассылки:
let group = dispatch_group_create()
Затем вы вводите группу для каждого фонового процесса:
dispatch_group_enter(group)
Наконец, вы можете зарегистрировать блок, который вызывается, когда группа становится пустой, то есть когда каждый dispatch_group_enter уравновешивается с помощью dispatch_group_leave:
dispatch_group_notify(group, dispatch_get_main_queue()) {
// All processes are done.
}
После завершения каждого из ваших процессов вы снова покидаете группу:
dispatch_group_leave(group)
Важно вызвать dispatch_group_enter перед вызовом dispatch_group_notify, иначе ваш блок будет запланирован немедленно, так как группа уже пуста.
После того, как ваш блок уведомлений был выполнен, вы можете повторно использовать очередь или отказаться от нее.
person
Sven
schedule
14.06.2015