为什么不执行test方法 ?
performSelector :withObject:afterDelay: 本质是一个定时器,且当前在子线程执行performSelector :withObject:afterDelay:方法,子线程没有runloop,因此不会执行performSelector :withObject:afterDelay:方法,需要自己手动添加runloop才能实现执行performSlector方法。
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
NSLog(@"任务1执行");
dispatch_async(queue, ^{
NSLog(@"任务2执行");
[self performSelector:@selector(test) withObject:nil afterDelay:2.0];
// 此方法执行
// [self performSelector:@selector(test) withObject:nil withObject:nil];
NSLog(@"任务3执行");
});
NSLog(@"任务4执行");
想要执行test方法 添加如下
//[[NSRunLoop currentRunLoop] addPort:[[NSPort alloc]init] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
为什么 [self performSelector:@selector(test) withObject:nil withObject:nil]可以实现执行?
因为此方法没有定时器,等价于直接[self test];