Suche…


Einen einfachen Thread erstellen

Die einfachste Methode zum Erstellen eines Threads besteht darin, einen Selektor "im Hintergrund" aufzurufen. Dies bedeutet, dass ein neuer Thread erstellt wird, um den Selektor auszuführen. Das empfangende Objekt kann ein beliebiges Objekt sein, nicht nur ein self , sondern muss auf den angegebenen Selektor antworten.

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

Erstellen Sie einen komplexeren Thread

Die Verwendung einer Unterklasse von NSThread ermöglicht die Implementierung komplexerer Threads (z. B. um das Übergeben weiterer Argumente zuzulassen oder alle zugehörigen Hilfsmethoden in einer Klasse zu kapseln). Darüber hinaus kann die NSThread Instanz in einer Eigenschaft oder einer Variablen gespeichert und nach ihrem aktuellen Status (ob noch ausgeführt wird) abgefragt werden.

Die NSThread Klasse unterstützt eine Methode namens cancel , die von einem beliebigen Thread aus aufgerufen werden kann. Anschließend wird die cancelled Eigenschaft auf Thread-sichere Weise auf YES . Die Thread-Implementierung kann die cancelled Eigenschaft abfragen (und / oder beobachten) und ihre main beenden. Dies kann verwendet werden, um einen Arbeitsthread ordnungsgemäß herunterzufahren.

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

Thread-lokaler Speicher

Jeder Thread hat Zugriff auf ein veränderbares Wörterbuch, das lokal für den aktuellen Thread ist. Dadurch können Informationen auf einfache Weise zwischengespeichert werden, ohne dass ein Sperren erforderlich ist, da jeder Thread ein eigenes, wandelbares Wörterbuch hat:

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

Das Wörterbuch wird automatisch freigegeben, wenn der Thread beendet wird.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow