Има много възможности за това как можете да приложите това. Всички те са съсредоточени около проследяването на това кои процеси са приключили. Най-добрият начин зависи от това как са внедрени вашите фонови процеси.
Ако използвате 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