Un ciclo de ejecución es una abstracción que (entre otras cosas) proporciona un mecanismo para manejar las fuentes de entrada del sistema (sockets, puertos, archivos, teclado, mouse, temporizadores, etc.).
Cada NSThread tiene su propio ciclo de ejecución, al que se puede acceder mediante el método currentRunLoop.
En general, no necesita acceder directamente al ciclo de ejecución, aunque hay algunos componentes (de red) que pueden permitirle especificar qué ciclo de ejecución utilizarán para el procesamiento de E / S.
Un bucle de ejecución para un subproceso determinado esperará hasta que una o más de sus fuentes de entrada tengan algún dato o evento, luego activará el controlador de entrada apropiado para procesar cada fuente de entrada que esté "lista".
Después de hacerlo, volverá a su ciclo, procesando la entrada de varias fuentes y "durmiendo" si no hay trabajo por hacer.
Esa es una descripción de nivel bastante alto (tratando de evitar demasiados detalles).
EDITAR
Un intento de abordar el comentario. Lo rompí en pedazos.
- significa que solo puedo acceder / ejecutar para ejecutar un bucle dentro del hilo, ¿verdad?
En efecto. NSRunLoop no es seguro para subprocesos y solo se debe acceder a él desde el contexto del subproceso que ejecuta el bucle.
- ¿Hay algún ejemplo simple de cómo agregar un evento para ejecutar un bucle?
Si desea monitorear un puerto, simplemente agregaría ese puerto al bucle de ejecución, y luego el bucle de ejecución observará la actividad de ese puerto.
- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode
También puede agregar un temporizador explícitamente con
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
- ¿Qué significa que luego volverá a su ciclo?
El ciclo de ejecución procesará todos los eventos listos en cada iteración (según su modo). Deberá consultar la documentación para descubrir los modos de ejecución, ya que eso está un poco más allá del alcance de una respuesta general.
- ¿Está inactivo el bucle de ejecución cuando inicio el hilo?
En la mayoría de las aplicaciones, el ciclo de ejecución principal se ejecutará automáticamente. Sin embargo, usted es responsable de iniciar el ciclo de ejecución y responder a los eventos entrantes de los hilos que gira.
- ¿Es posible agregar algunos eventos al ciclo de ejecución del hilo fuera del hilo?
No estoy seguro de lo que quiere decir aquí. No agrega eventos al ciclo de ejecución. Agrega fuentes de entrada y fuentes de temporizador (del hilo que posee el ciclo de ejecución). El bucle de carrera luego los observa para ver si hay actividad. Por supuesto, puede proporcionar entrada de datos de otros subprocesos y procesos, pero la entrada será procesada por el ciclo de ejecución que está monitoreando esas fuentes en el subproceso que está ejecutando el ciclo de ejecución.
- ¿Significa que a veces puedo usar el bucle de ejecución para bloquear el hilo por un tiempo?
En efecto. De hecho, un bucle de ejecución "permanecerá" en un controlador de eventos hasta que ese controlador de eventos haya regresado. Puede ver esto en cualquier aplicación de manera bastante simple. Instale un controlador para cualquier acción de E / S (por ejemplo, presionar un botón) que está inactivo. Bloqueará el ciclo de ejecución principal (y toda la interfaz de usuario) hasta que se complete ese método.
Lo mismo se aplica a cualquier ciclo de ejecución.
Le sugiero que lea la siguiente documentación sobre ciclos de ejecución:
https://developer.apple.com/documentation/foundation/nsrunloop
y cómo se utilizan en los hilos:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1