Objective-C语言创建更复杂的线程

示例

使用的子类NSThread可以实现更复杂的线程(例如,允许传递更多的参数或将所有相关的辅助方法封装在一个类中)。此外,该NSThread实例可以保存在属性或变量中,并可以查询其当前状态(是否仍在运行)。

本NSThread类支持的方法称为cancel可以从任何线程,那么将被称为cancelled属性YES的线程安全的方式。线程实现可以查询(和/或观察)该cancelled属性并退出其main方法。这可用于正常关闭工作线程。

// 创建一个新的NSThread子类
@interface MyThread : NSThread

// 为需要从调用方传递到新值的值添加属性
//线。线程启动后,调用者不得修改这些内容,以避免
// 线程问题(或必须使用锁使属性成为线程安全的)。
@property NSInteger someProperty;

@end

@implementation MyThread

- (void)main
{
    @autoreleasepool {
        // 主线程方法在这里
        NSLog(@"New thread. Some property: %ld", (long)self.someProperty);
    }
}

@end


MyThread *thread = [[MyThread alloc] init];
thread.someProperty = 42;
[thread start];