建立更復雜的執行緒
使用 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];