Esta é uma resposta do tipo eu também. Vou falar sobre nosso caso de uso.
Temos uma camada de serviços e a camada de IU (entre outras camadas). A camada de serviços executa tarefas em segundo plano. (Tarefas de manipulação de dados, tarefas CoreData, chamadas de rede, etc.). A camada de serviço tem algumas filas de operação para satisfazer as necessidades da camada de IU.
A camada de IU depende da camada de serviços para fazer seu trabalho e, em seguida, executar um bloco de conclusão de sucesso. Este bloco pode conter o código UIKit. Um caso de uso simples é obter todas as mensagens do servidor e recarregar a visualização da coleção.
Aqui, garantimos que os blocos que são passados para a camada de serviços são despachados na fila em que o serviço foi chamado. Como dispatch_get_current_queue é um método obsoleto, usamos o NSOperationQueue.currentQueue para obter a fila atual do chamador. Nota importante sobre esta propriedade.
Chamar esse método de fora do contexto de uma operação em execução normalmente resulta no retorno de nil.
Como sempre chamamos nossos serviços em uma fila conhecida (Nossas filas personalizadas e Fila principal), isso funciona bem para nós. Temos casos em que o serviçoA pode chamar o serviçoB, que pode chamar o serviçoC. Como controlamos de onde a primeira chamada de serviço está sendo feita, sabemos que o restante dos serviços seguirá as mesmas regras.
Portanto, NSOperationQueue.currentQueue sempre retornará uma de nossas Filas ou MainQueue.
dispatch_get_current_queue()
está obsoleto no iOS 6? os documentos não dizem nada sobre isso