多线程相关问题

为什么不执行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];

你可能感兴趣的:(多线程相关问题)