Zoeken…


Een eenvoudige thread maken

De meest eenvoudige manier om een thread te maken is door een selector "op de achtergrond" aan te roepen. Dit betekent dat er een nieuwe thread wordt gemaakt om de selector uit te voeren. Het ontvangende object kan elk object zijn, niet alleen self , maar het moet reageren op de gegeven selector.

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

Creëer complexere threads

Door een subklasse van NSThread kunnen complexere threads worden geïmplementeerd (bijvoorbeeld om meer argumenten door te geven of alle gerelateerde hulpmethoden in één klasse in te kapselen). Bovendien kan de NSThread instantie worden opgeslagen in een eigenschap of variabele en kan worden gevraagd naar de huidige status (of deze nog actief is).

De klasse NSThread ondersteunt een methode met de naam cancel die kan worden aangeroepen vanuit elke thread, waarmee de cancelled eigenschap vervolgens op een threadveilige manier wordt ingesteld op YES . De thread implementatie kan opvragen (en / of observeren) de cancelled eigenschap en verlaat de main methode. Dit kan worden gebruikt om een werkdraad netjes af te sluiten.

// 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-lokale opslag

Elke thread heeft toegang tot een veranderlijk woordenboek dat lokaal is voor de huidige thread. Dit maakt het mogelijk om informatie op een eenvoudige manier in de cache op te slaan zonder de noodzaak om te vergrendelen, omdat elke thread zijn eigen specifieke veranderlijke woordenboek heeft:

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

Het woordenboek wordt automatisch vrijgegeven wanneer de thread eindigt.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow