Cinco modos de Runloop

1. El runloop es un bucle controlado por eventos. Procesa eventos cuando se reciben y se pone en suspensión cuando no hay eventos. 2.
Una vez que se inicia la aplicación, se crea el hilo principal y el runloop correspondiente del principal. También se crea el subproceso. El runloop también garantiza que el programa pueda ejecutarse continuamente. Los subprocesos creados más tarde no tienen un runloop de forma predeterminada y solo se crean cuando se llama a [NSRunLoop currentRunLoop] para obtenerlo. 3. Modos de Runloop
:
Hay cinco modos en total:

  • NSDefaultRunLoopMode predeterminado
  • UITrackingRunLoopMode UI dedicada
  • UIInitializationRunLoopMode es el primer modo ingresado cuando la aplicación recién se inicia y ya no se usará una vez que se complete el inicio.
  • GSEventReceiveRunLoopMode Modo interno para aceptar eventos del sistema
  • NSRunLoopCommonModes Este es un modo de marcador de posición, no un modo real

Escenario: cuando se agrega un UIScrollView a una página y hay un temporizador, cuando el UIScrollView se desliza, el temporizador no funciona,

razón:

Agregamos el temporizador al hilo principal actual y seleccionamos el modo predeterminado de NSDefaultRunLoopMode. El valor predeterminado es la ejecución normal. Cuando se desliza UIScrollView, la interfaz de usuario interactúa. En este momento, el hilo principal Runloop cambiará a UITrackingRunLoopMode y el temporizador se detendrá. El modo es similar
a la pista de aterrizaje y solo se puede realizar un runloop. en una pista al mismo tiempo. , y el modo tiene prioridad. UITrackingRunLoopMode es el modo UI, que es el modo con la mayor prioridad. Cuando el runloop encuentra un evento, cambiará al modo especificado por el evento. UITrackingRunLoopMode tiene tiene la prioridad más alta, por lo que cambia a este modo, los eventos en otros modos no se ejecutarán en este momento.
Y UITrackingRunLoopMode solo puede activarse mediante eventos de UI. Si el modo especificado por el temporizador anterior se cambia al modo UI, no se ejecuta de forma predeterminada, pero al deslizar textView Cuando se ejecuta, cambiará al modo UI y el temporizador se puede ejecutar. Una vez que se detiene el deslizamiento, el temporizador se detendrá nuevamente. NSRunLoopCommonModes es esencialmente NSDefaultRunLoopMode y UITrackingRunLoopMode, lo que equivale a agregar
ambos modos, no importa qué pista, se encontrará un evento de temporizador.


Entonces, al definir NSTimer, es mejor agregarlo directamente a NSRunLoopCommonModes.

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeEvent) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer: timer forMode:NSRunLoopCommonModes];

Supongo que te gusta

Origin blog.csdn.net/KLong27/article/details/132168012
Recomendado
Clasificación