Це я теж відповідь. Тому я розповім про наш випадок використання.
У нас є рівень послуг та рівень користувальницького інтерфейсу (серед інших шарів). Службовий рівень виконує завдання у фоновому режимі. (Завдання з обробки даних, завдання CoreData, мережеві дзвінки тощо). Службовий рівень має пару черг роботи для задоволення потреб рівня користувальницького інтерфейсу.
Шар інтерфейсу покладається на рівень послуг, щоб виконати свою роботу, а потім виконати блок завершення успіху. Цей блок може містити код UIKit. Простий варіант використання - отримати всі повідомлення з сервера та перезавантажити представлення колекції.
Тут ми гарантуємо, що блоки, що передаються в рівень послуг, будуть відправлені в чергу, на яку викликується служба. Оскільки dispatch_get_current_queue є застарілим методом, ми використовуємо NSOperationQueue.currentQueue для отримання поточної черги абонента. Важлива примітка щодо цього ресурсу.
Виклик цього методу поза контекстом запущеної операції, як правило, призводить до повернення нуля.
Оскільки ми завжди викликаємо наші сервіси у відомій черзі (Наші користувацькі черги та Основна черга), це добре працює для нас. У нас є випадки, коли serviceA може викликати serviceB, який може викликати serviceC. Оскільки ми контролюємо, звідки здійснюється перший дзвінок служби, ми знаємо, що решта послуг будуть дотримуватися тих же правил.
Тож NSOperationQueue.currentQueue завжди повертатиме одну з наших черг чи MainQueue.
dispatch_get_current_queue()
в iOS 6 застаріле? документи нічого не говорять про це