Detectar acciones de interfaz de usuario fuera de hilo principal

Nota: Esta pregunta está relacionada con Advertir sobre llamadas a UIKit desde subprocesss de background, pero no da una respuesta sobre dos de los enfoques a continuación.

Tengo un problema donde la pantalla de la aplicación parpadea rápidamente. Ya tuve ese problema en el pasado y se debe a la actualización de los elementos de la interfaz de usuario fuera del hilo principal.

Por lo tanto, he puesto el siguiente código en muchos lugares:

assertMainThread(); 

cual es:

 #define assertMainThread() NSAssert([NSThread isMainThread],@"Method called using a thread other than main!") 

Por supuesto, no puedo cubrir el código completo con assertMainThread () ya que hay muchos lugares y algunos códigos se utilizan de forma legítima por queues GCD en segundo plano.

Miré muchos lugares, pero no pude encontrar una forma de que XCode o LLDB me dijeran cuándo se actualiza un elemento de interfaz de usuario fuera del hilo principal. Pensé que uno podría usar puntos de corte simbólicos u otro mecanismo para romper en el lugar donde un método común en UIKit se llama fuera del hilo principal, por ejemplo, pero no pudo encontrar una manera.

También pensé que UIKit podría advertir en el time de ejecución cuando se realiza una llamada de ese tipo? O al less dénos algunas herramientas para ver ayuda para depurar tales problemas.

Otro enfoque que busqué (pero no lo intenté) es utilizar algunas técnicas de cobertura de código y tratar de extraer lo que se estaba ejecutando en el punto visual del código, pero no lo hice.

¿Tiene alguna idea sobre cómo abordar el problema?

Xcode 9 y posterior

Xcode 9 presenta un corrector de subprocesss principales que detecta muchos problemas relevantes potencialmente realizados fuera del subprocess principal. Puede habilitar este analizador de la forma habitual en las opciones de Scheme junto con otros analizadores de time de ejecución.

Xcode 8.3 y anterior

Alternativa, solución de Xcode-way basada en la esencia de steipete – punto de corte simbólico:

Punto de corte simbólico de Xcode

Puede agregar fácilmente puntos de interrupción para otros methods en cualquier class UIKit , como -[UIView setNeedsDisplay] etc.

Comenzando con Xcode 9, Apple integró un Comprobador de hilo principal en Xcode, que está habilitado de manera pnetworkingeterminada si ejecuta su aplicación con el depurador Xcode.

Se puede deshabilitar / habilitar en la configuration del esquema en la pestaña de diagnóstico.