moviles ejemplos aplicaciones ios xcode4 uikit lldb

ios - ejemplos - Detectar acciones de la interfaz de usuario fuera del hilo principal



ejemplos de aplicaciones moviles android (2)

Xcode 9 y posteriores

Xcode 9 introduce un comprobador de subprocesos principal que busca muchos problemas relevantes que pueden ser ejecutados fuera del hilo principal. Puede habilitar este analizador de la manera habitual en sus opciones de Esquema junto con otros analizadores de tiempo de ejecución.

Xcode 8.3 y anteriores

Solución alternativa de Xcode-way basada en la esencia de steipete : punto de ruptura simbólico:

Puede agregar fácilmente puntos de interrupción para algunos otros métodos en cualquier clase de UIKit , como -[UIView setNeedsDisplay] etc.

Nota: esta pregunta está relacionada con Advertir en las llamadas a UIKit desde subprocesos en segundo plano, pero no da una respuesta en dos de los siguientes enfoques.

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 eso 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 todo el código con assertMainThread () ya que hay muchos lugares y parte del código se usa de manera legítima mediante colas de GCD en segundo plano.

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

También pensé que UIKit podría advertir en el tiempo de ejecución cuando se realiza una llamada de este tipo? O al menos, denos algunas herramientas para ver la ayuda para depurar tales problemas.

Otro enfoque que observé (pero no probé) es usar algunas técnicas de cobertura de código e intentar extraer qué hilo se estaba ejecutando en qué punto del código visualmente, pero no siguió esa ruta.

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


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

Se puede deshabilitar / habilitar en la configuración del esquema en la pestaña de diagnósticos.