為什么不執(zhí)行test方法 ?
performSelector :withObject:afterDelay: 本質(zhì)是一個(gè)定時(shí)器,且當(dāng)前在子線程執(zhí)行performSelector :withObject:afterDelay:方法,子線程沒有runloop,因此不會(huì)執(zhí)行performSelector :withObject:afterDelay:方法,需要自己手動(dòng)添加runloop才能實(shí)現(xiàn)執(zhí)行performSlector方法。
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
NSLog(@"任務(wù)1執(zhí)行");
dispatch_async(queue, ^{
NSLog(@"任務(wù)2執(zhí)行");
[self performSelector:@selector(test) withObject:nil afterDelay:2.0];
// 此方法執(zhí)行
// [self performSelector:@selector(test) withObject:nil withObject:nil];
NSLog(@"任務(wù)3執(zhí)行");
});
NSLog(@"任務(wù)4執(zhí)行");
想要執(zhí)行test方法 添加如下
//[[NSRunLoop currentRunLoop] addPort:[[NSPort alloc]init] forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
為什么 [self performSelector:@selector(test) withObject:nil withObject:nil]可以實(shí)現(xiàn)執(zhí)行?
因?yàn)榇朔椒]有定時(shí)器,等價(jià)于直接[self test];