Buscar..


Creando un hilo simple

La forma más sencilla de crear un hilo es llamando a un selector "en el fondo". Esto significa que se crea un nuevo hilo para ejecutar el selector. El objeto receptor puede ser cualquier objeto, no solo self , sino que debe responder al selector dado.

- (void)createThread {
    [self performSelectorInBackground:@selector(threadMainWithOptionalArgument:)
                           withObject:someObject];
}

- (void)threadMainWithOptionalArgument:(id)argument {
    // To avoid memory leaks, the first thing a thread method needs to do is
    // create a new autorelease pool, either manually or via "@autoreleasepool".
    @autoreleasepool {
        // The thread code should be here.
    }
}

Crear hilo más complejo.

El uso de una subclase de NSThread permite la implementación de subprocesos más complejos (por ejemplo, para permitir pasar más argumentos o para encapsular todos los métodos de ayuda relacionados en una clase). Además, la instancia de NSThread se puede guardar en una propiedad o variable y se puede consultar sobre su estado actual (si todavía se está ejecutando).

La clase NSThread admite un método llamado cancel que se puede llamar desde cualquier subproceso, que luego establece la propiedad cancelled en YES de una manera segura para subprocesos. La implementación del hilo puede consultar (y / u observar) la propiedad cancelled y salir de su método main . Esto se puede utilizar para cerrar con gracia un subproceso de trabajo.

// Create a new NSThread subclass
@interface MyThread : NSThread

// Add properties for values that need to be passed from the caller to the new
// thread. Caller must not modify these once the thread is started to avoid
// threading issues (or the properties must be made thread-safe using locks).
@property NSInteger someProperty;

@end

@implementation MyThread

- (void)main
{
    @autoreleasepool {
        // The main thread method goes here
        NSLog(@"New thread. Some property: %ld", (long)self.someProperty);
    }
}

@end


MyThread *thread = [[MyThread alloc] init];
thread.someProperty = 42;
[thread start];

Almacenamiento de hilo local

Cada hilo tiene acceso a un diccionario mutable que es local al hilo actual. Esto permite almacenar información en caché de una manera fácil sin la necesidad de bloquear, ya que cada hilo tiene su propio diccionario mutable dedicado:

NSMutableDictionary *localStorage = [NSThread currentThread].threadDictionary;
localStorage[someKey] = someValue;

El diccionario se libera automáticamente cuando el hilo termina.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow