Dies ist auch eine Antwort von mir. Also werde ich über unseren Anwendungsfall sprechen.
Wir haben eine Serviceschicht und die UI-Schicht (unter anderem). Die Serviceschicht führt Aufgaben im Hintergrund aus. (Datenmanipulationsaufgaben, CoreData-Aufgaben, Netzwerkaufrufe usw.). Die Serviceschicht verfügt über einige Operationswarteschlangen, um die Anforderungen der UI-Schicht zu erfüllen.
Die UI-Schicht verlässt sich auf die Services-Schicht, um ihre Arbeit zu erledigen und dann einen Erfolgsabschlussblock auszuführen. Dieser Block kann UIKit-Code enthalten. Ein einfacher Anwendungsfall besteht darin, alle Nachrichten vom Server abzurufen und die Sammlungsansicht neu zu laden.
Hier garantieren wir, dass die Blöcke, die an die Serviceschicht übergeben werden, in der Warteschlange versendet werden, in der der Service aufgerufen wurde. Da dispatch_get_current_queue eine veraltete Methode ist, verwenden wir NSOperationQueue.currentQueue, um die aktuelle Warteschlange des Anrufers abzurufen. Wichtiger Hinweis zu dieser Eigenschaft.
Das Aufrufen dieser Methode von außerhalb des Kontexts einer laufenden Operation führt normalerweise dazu, dass Null zurückgegeben wird.
Da wir unsere Dienste immer in einer bekannten Warteschlange (unseren benutzerdefinierten Warteschlangen und der Hauptwarteschlange) aufrufen, funktioniert dies gut für uns. Wir haben Fälle, in denen serviceA serviceB aufrufen kann, die serviceC aufrufen können. Da wir steuern, woher der erste Serviceabruf stammt, wissen wir, dass der Rest der Services denselben Regeln folgt.
Daher gibt NSOperationQueue.currentQueue immer eine unserer Warteschlangen oder die MainQueue zurück.
dispatch_get_current_queue()
ist das in iOS 6 veraltet? Die Dokumente sagen nichts darüber