Un bucle 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 a través del método CurrentRunLoop.
En general, no es necesario acceder directamente al ciclo de ejecución, aunque hay algunos componentes (de red) que pueden permitirle especificar qué ciclo de ejecución utilizará 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 datos o eventos, luego activará los manejadores de entrada apropiados 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 que hacer.
Esa es una descripción de alto nivel (tratando de evitar demasiados detalles).
EDITAR
Un intento de abordar el comentario. Lo rompí en pedazos.
- que significa que puedo único acceso/ejecución a otra dentro del bucle de hilo ¿verdad?
hecho. NSRunLoop no es seguro para subprocesos y solo se debe acceder desde el contexto del subproceso que ejecuta el ciclo.
- ¿hay algún ejemplo sencillo de cómo agregar eventos a ejecutar en bucle?
Si desea supervisar un puerto, sólo habría que añadir puerto al bucle de ejecución, y luego el bucle de ejecución vigilaría ese puerto para la actividad.
- (void)addPort:(NSPort *)aPort forMode:(NSString *)mode
También puede agregar un contador de tiempo de forma explícita con
- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode
- lo que significa que será luego regresar a su bucle?
El bucle de ejecución procesará todos los eventos listos cada iteración (de acuerdo con su modo).Tendrá que consultar la documentación para descubrir los modos de ejecución, ya que eso está un poco fuera del alcance de una respuesta general.
- se ejecuta en bucle inactivo 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 para los hilos que gira.
- es posible añadir algunos eventos para enhebrar bucle de ejecutar 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 (desde la secuencia que posee el ciclo de ejecución). El ciclo de ejecución luego los observa por actividad. Por supuesto, puede proporcionar datos de otros hilos y procesos, pero la entrada será procesada por el ciclo de ejecución que está monitoreando esas fuentes en el hilo que está ejecutando el ciclo de ejecución.
- Qué significa que a veces puedo utilizar bucle de ejecución para bloquear hilo durante un tiempo
hecho. De hecho, un ciclo de ejecución se "mantendrá" en un controlador de eventos hasta que el controlador de eventos haya regresado. Puedes ver esto en cualquier aplicación lo suficiente. Instale un controlador para cualquier acción IO (por ejemplo, presionar un botón) que duerme. Bloqueará el ciclo de ejecución principal (y toda la UI) 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 en los bucles de ejecución:
https://developer.apple.com/documentation/foundation/nsrunloop
y cómo se utiliza dentro de las discusiones:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1
Esta pregunta es demasiado amplio en su alcance. Por favor, refine su pregunta a algo más específico. –
al principio quiero saber qué hacer en genereal NSRunLoop y cómo se conecta con el hilo – taffarel