Ricerca…


Creare un thread semplice

Il modo più semplice per creare un thread è chiamare un selettore "in background". Ciò significa che viene creato un nuovo thread per eseguire il selettore. L'oggetto ricevente può essere qualsiasi oggetto, non solo self , ma deve rispondere al selettore dato.

- (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.
    }
}

Crea thread più complessi

L'utilizzo di una sottoclasse di NSThread consente l'implementazione di thread più complessi (ad esempio, per consentire il passaggio di più argomenti o incapsulare tutti i metodi di supporto correlati in una classe). Inoltre, l'istanza NSThread può essere salvata in una proprietà o variabile e può essere interrogata sul suo stato corrente (se è ancora in esecuzione).

La classe NSThread supporta un metodo chiamato cancel che può essere chiamato da qualsiasi thread, che quindi imposta la proprietà cancelled su YES in modo thread-safe. L'implementazione del thread può interrogare (e / o osservare) la proprietà cancelled e uscire dal suo metodo main . Questo può essere usato per chiudere con grazia un thread di lavoro.

// 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];

Memorizzazione locale del thread

Ogni thread ha accesso a un dizionario mutabile che è locale al thread corrente. Ciò consente di memorizzare le informazioni in un modo semplice senza la necessità di bloccare, poiché ogni thread ha il suo dizionario mutable dedicato:

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

Il dizionario viene rilasciato automaticamente quando il thread termina.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow