Objective-C Language Créer des threads plus complexes


Exemple

L'utilisation d'une sous-classe de NSThread permet la mise en œuvre de threads plus complexes (par exemple, pour permettre de transmettre plus d'arguments ou d'encapsuler toutes les méthodes d'assistance associées dans une classe). En outre, l'instance NSThread peut être enregistrée dans une propriété ou une variable et peut être interrogée sur son état actuel (qu'il soit toujours en cours d'exécution).

La classe NSThread prend en charge une méthode appelée cancel qui peut être appelée à partir de n'importe quel thread, qui définit ensuite la propriété cancelled sur YES de manière sûre. L'implémentation du thread peut interroger (et / ou observer) la propriété cancelled et quitter sa méthode main . Cela peut être utilisé pour arrêter normalement un thread de travail.

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