创建更复杂的线程

使用 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];