Esta es una respuesta yo también. Entonces hablaré sobre nuestro caso de uso.
Tenemos una capa de servicios y la capa de UI (entre otras capas). La capa de servicios ejecuta tareas en segundo plano. (Tareas de manipulación de datos, tareas CoreData, llamadas de red, etc.). La capa de servicio tiene un par de colas de operaciones para satisfacer las necesidades de la capa de interfaz de usuario.
La capa de interfaz de usuario se basa en la capa de servicios para hacer su trabajo y luego ejecutar un bloque de finalización satisfactoria. Este bloque puede tener código UIKit. Un caso de uso simple es obtener todos los mensajes del servidor y volver a cargar la vista de colección.
Aquí garantizamos que los bloques que se pasan a la capa de servicios se envían en la cola en la que se invocó el servicio. Dado que dispatch_get_current_queue es un método obsoleto, usamos NSOperationQueue.currentQueue para obtener la cola actual de la persona que llama. Nota importante sobre esta propiedad.
Llamar a este método desde fuera del contexto de una operación en ejecución normalmente da como resultado que no se devuelva nada.
Dado que siempre invocamos nuestros servicios en una cola conocida (nuestras colas personalizadas y cola principal), esto funciona bien para nosotros. Tenemos casos en los que el servicio A puede llamar al servicio B que puede llamar al servicio C. Dado que controlamos desde dónde se realiza la primera llamada de servicio, sabemos que el resto de los servicios seguirán las mismas reglas.
Entonces NSOperationQueue.currentQueue siempre devolverá una de nuestras Queues o MainQueue.
dispatch_get_current_queue()
está obsoleto en iOS 6? los doctores no dicen nada al respecto