建立更復雜的執行緒

使用 NSThread 的子類允許實現更復雜的執行緒(例如,允許傳遞更多引數或將所有相關的輔助方法封裝在一個類中)。此外,NSThread 例項可以儲存在屬性或變數中,並且可以查詢其當前狀態(是否仍在執行)。

NSThread 類支援一個名為 cancel 的方法,可以從任何執行緒呼叫,然後以執行緒安全的方式將 cancelled 屬性設定為 YES。執行緒實現可以查詢(和/或觀察)cancelled 屬性並退出其 main 方法。這可以用於優雅地關閉工作執行緒。

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