对于如下代码的,它的打印结果是什么
NSThread *thread = [[NSThread alloc] initWithBlock:^{ NSLog(@"1"); }]; [thread start]; [self performSelector:@selector(testhaha) onThread:thread withObject:nil waitUntilDone:true]; - (void)testhaha { NSLog(@"2"); }
运行之后打印结果如下:
2021-02-23 23:59:45.245881+0800 KVOTest[17729:646223] 1 2021-02-23 23:59:45.253879+0800 KVOTest[17729:646135] *** Terminating app due to uncaught exception 'NSDestinationInvalidException', reason: '*** -[ViewController performSelector:onThread:withObject:waitUntilDone:modes:]: target thread exited while waiting for the perform' *** First throw call stack:
从报错来看,在执行testhaha方法的时候,线程已经退出
解决方法,开启runloop,延长线程的时间:
NSThread *thread = [[NSThread alloc] initWithBlock:^{ NSLog(@"1"); [[NSRunLoop currentRunLoop] addPort:[[NSPort alloc] init] forMode:NSRunLoopCommonModes]; [[NSRunLoop currentRunLoop] run]; }]; [thread start]; [self performSelector:@selector(testhaha) onThread:thread withObject:nil waitUntilDone:true]; - (void)testhaha { NSLog(@"2"); }