NSThread创建子线程并执行的三种方式
1、通过NSThread的类方法:
.1>不能拿到线程对象
.2>系统自动启动线程
1 /* 2 类方法执行子线程 3 1、不能拿到线程对象 4 2、系统自动启动线程 5 */ 6 - (void)demo:(id)param{ 7 NSLog(@"%@ %@",param,[NSThread currentThread]); 8 } 9 - (void)threadDemo2{ 10 [NSThread detachNewThreadSelector:@selector(demo:) toTarget:self withObject:@"detach"]; 11 }
2、通过NSObject (NSThreadPerformAdditions)分类方法
.1>不能拿到线程对象
.2>系统自动启动线程
1 /* 2 NSObject (NSThreadPerformAdditions)分类方法执行子线程 3 1、不能拿到线程对象 4 2、系统自动启动线程 5 */ 6 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 7 // 子线程执行耗时操作 8 [self performSelectorInBackground:@selector(longOperation) withObject:nil]; 9 10 // 主线程更新UI 11 // waitUntilDone:YES-执行完此方法才执行后面的代码;NO-不必等执行完此方法,就执行后面的代码 12 // [self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:YES]; 13 14 NSLog(@"aaaaa"); 15 }
3、通过构造方法创建子线程对象,alloc init方法
.1>可以拿到线程对象
.2>需要手动启动线程
1 /* 2 构造方法创建子线程对象 3 1、可以拿到线程对象 4 2、需要手动启动线程 5 */ 6 - (void)demo:(id)param{ 7 NSLog(@"%@ %@",param,[NSThread currentThread]); 8 } 9 - (void)threadDemo1{ 10 // 创建子线程对象 11 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(demo:) object:@"nsthread alloc init"]; 12 // 启动线程 13 [thread start]; 14 }