创建更复杂的线程
使用 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];