To jest odpowiedź dla mnie też. Więc opowiem o naszym przypadku użycia.
Mamy warstwę usług i warstwę interfejsu użytkownika (między innymi). Warstwa usług uruchamia zadania w tle. (Zadania manipulacji danymi, zadania CoreData, połączenia sieciowe itp.). Warstwa usług ma kilka kolejek operacji, aby zaspokoić potrzeby warstwy interfejsu użytkownika.
Warstwa UI polega na warstwie usług, aby wykonać swoją pracę, a następnie uruchomić blok ukończenia sukcesu. Ten blok może zawierać kod UIKit. Prostym przypadkiem użycia jest pobranie wszystkich wiadomości z serwera i ponowne załadowanie widoku kolekcji.
Tutaj gwarantujemy, że bloki przekazywane do warstwy usług są wysyłane w kolejce, w której usługa została wywołana. Ponieważ dispatch_get_current_queue jest przestarzałą metodą, używamy NSOperationQueue.currentQueue, aby uzyskać bieżącą kolejkę wywołującego. Ważna uwaga na temat tej nieruchomości.
Wywołanie tej metody spoza kontekstu działającej operacji zazwyczaj powoduje zwrócenie wartości nil.
Ponieważ zawsze wywołujemy nasze usługi w znanej kolejce (nasze kolejki niestandardowe i kolejka główna), działa to dobrze dla nas. Mamy przypadki, w których serviceA może wezwać serviceB, który może wezwać serviceC. Ponieważ kontrolujemy, skąd jest wykonywane pierwsze zgłoszenie serwisowe, wiemy, że pozostałe usługi będą podlegać tym samym regułom.
Zatem NSOperationQueue.currentQueue zawsze zwróci jedną z naszych kolejek lub MainQueue.
dispatch_get_current_queue()
jest przestarzały w iOS 6?