En este módulo, aprenderemos sobre el multihilo y la concurrencia en Objective-C. Estos conceptos son cruciales para desarrollar aplicaciones eficientes y responsivas, especialmente cuando se manejan tareas que pueden bloquear el hilo principal, como operaciones de red o procesamiento intensivo de datos.
Conceptos Clave
- Hilos (Threads): Un hilo es la unidad más pequeña de procesamiento que puede ser programada por un sistema operativo.
- Concurrencia: La capacidad de un sistema para ejecutar múltiples tareas al mismo tiempo.
- GCD (Grand Central Dispatch): Una tecnología de Apple que facilita la ejecución de tareas en paralelo.
- NSOperation y NSOperationQueue: Clases de alto nivel para gestionar operaciones concurrentes.
Hilos en Objective-C
Creación de Hilos
En Objective-C, puedes crear hilos manualmente utilizando la clase NSThread.
// Ejemplo de creación de un hilo
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadMethod) object:nil];
[thread start];
// Método que se ejecutará en el hilo
- (void)myThreadMethod {
@autoreleasepool {
// Código que se ejecutará en el hilo
NSLog(@"Hilo en ejecución");
}
}Bloques y GCD
Grand Central Dispatch (GCD) es una tecnología que facilita la ejecución de tareas en paralelo utilizando colas de despacho.
Colas de Despacho
- Serial Dispatch Queue: Ejecuta tareas en orden, una a la vez.
- Concurrent Dispatch Queue: Ejecuta múltiples tareas en paralelo.
Ejemplo de GCD
// Cola de despacho global concurrente
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// Enviar una tarea a la cola
dispatch_async(queue, ^{
// Código que se ejecutará en paralelo
NSLog(@"Tarea en ejecución en cola concurrente");
});
// Cola de despacho serial
dispatch_queue_t serialQueue = dispatch_queue_create("com.example.mySerialQueue", DISPATCH_QUEUE_SERIAL);
// Enviar una tarea a la cola serial
dispatch_async(serialQueue, ^{
// Código que se ejecutará en orden
NSLog(@"Tarea en ejecución en cola serial");
});NSOperation y NSOperationQueue
NSOperation y NSOperationQueue proporcionan una abstracción de alto nivel para gestionar operaciones concurrentes.
Ejemplo de NSOperation
// Crear una operación
NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
// Código que se ejecutará en la operación
NSLog(@"Operación en ejecución");
}];
// Crear una cola de operaciones
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
// Añadir la operación a la cola
[operationQueue addOperation:operation];Ejercicios Prácticos
Ejercicio 1: Crear un Hilo
Objetivo: Crear un hilo utilizando NSThread y ejecutar un método en ese hilo.
Instrucciones:
- Define un método que imprima un mensaje en la consola.
- Crea un hilo utilizando
NSThready ejecuta el método en ese hilo.
Solución:
- (void)printMessage {
@autoreleasepool {
NSLog(@"Mensaje desde el hilo");
}
}
- (void)createThread {
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(printMessage) object:nil];
[thread start];
}Ejercicio 2: Utilizar GCD para Ejecutar Tareas en Paralelo
Objetivo: Utilizar GCD para ejecutar dos tareas en paralelo.
Instrucciones:
- Define dos bloques de código que impriman mensajes diferentes en la consola.
- Utiliza
dispatch_asyncpara enviar estos bloques a una cola concurrente global.
Solución:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSLog(@"Tarea 1 en ejecución");
});
dispatch_async(queue, ^{
NSLog(@"Tarea 2 en ejecución");
});Ejercicio 3: Utilizar NSOperation y NSOperationQueue
Objetivo: Crear y ejecutar una operación utilizando NSOperation y NSOperationQueue.
Instrucciones:
- Define un bloque de código que imprima un mensaje en la consola.
- Crea una operación utilizando
NSBlockOperation. - Añade la operación a una cola de operaciones.
Solución:
NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"Operación en ejecución");
}];
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
[operationQueue addOperation:operation];Resumen
En esta sección, hemos cubierto los conceptos básicos de multihilo y concurrencia en Objective-C. Aprendimos a crear hilos utilizando NSThread, a ejecutar tareas en paralelo utilizando GCD, y a gestionar operaciones concurrentes con NSOperation y NSOperationQueue. Estos conocimientos son fundamentales para desarrollar aplicaciones eficientes y responsivas.
En el próximo módulo, exploraremos cómo trabajar con datos, incluyendo el manejo de archivos y la serialización/deserialización de datos.
Curso de Programación en Objective-C
Módulo 1: Introducción a Objective-C
- Introducción a Objective-C
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Tipos de Datos y Variables
- Operadores y Expresiones
Módulo 2: Flujo de Control
Módulo 3: Funciones y Métodos
- Definición y Llamada de Funciones
- Parámetros de Función y Valores de Retorno
- Sintaxis de Métodos en Objective-C
- Métodos de Clase e Instancia
Módulo 4: Programación Orientada a Objetos
Módulo 5: Gestión de Memoria
- Introducción a la Gestión de Memoria
- Conteo Automático de Referencias (ARC)
- Retención y Liberación Manual
- Mejores Prácticas de Gestión de Memoria
Módulo 6: Temas Avanzados
Módulo 7: Trabajo con Datos
- Manejo de Archivos
- Serialización y Deserialización
- Conceptos Básicos de Redes
- Trabajo con JSON y XML
