Sök…


Skapa en enkel tråd

Det enklaste sättet att skapa en tråd är genom att kalla en väljare "i bakgrunden". Detta innebär att en ny tråd skapas för att köra väljaren. Det mottagande objektet kan vara vilket som helst objekt, inte bara self , utan det måste svara på den angivna väljaren.

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

Skapa mer komplex tråd

Genom att använda en underklass av NSThread tillåts implementering av mer komplexa trådar (till exempel för att tillåta överföra fler argument eller för att kapsla alla relaterade hjälparmetoder i en klass). Dessutom kan NSThread instansen sparas i en egenskap eller variabel och kan frågas om dess nuvarande tillstånd (om den fortfarande körs).

NSThread stöder en metod som kallas cancel som kan anropas från valfri tråd, som sedan ställer in den cancelled egenskapen till YES på ett tråd-säkert sätt. Genomförande av tråden kan fråga (och / eller observera) den cancelled egendom och lämna dess main metoden. Detta kan användas för att graciöst stänga av en arbetartråd.

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

Tråd-lokal lagring

Varje tråd har tillgång till en muterbar ordbok som är lokal för den aktuella tråden. Detta gör det möjligt att cache-information på ett enkelt sätt utan att behöva låsas, eftersom varje tråd har sin egen dedikerade, muterbara ordlista:

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

Ordboken släpps automatiskt när tråden avslutas.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow