-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"1");
[self performSelector:@selector(test) withObject:nil afterDelay:0];
NSLog(@"2");
});
}
-(void)test
{
NSLog(@"3");
}
结果:
2019-09-30 11:45:59.590025+0800 测试 switch[38382:3031541] 1
2019-09-30 11:45:59.590292+0800 测试 switch[38382:3031541] 2
当调用 performSelecter:afterDelay: 后,实际上其内部会创建一个 Timer 并添加到当前线程的 RunLoop 中。所以如果当前线程没有 RunLoop,则这个方法会失效。
'
屏幕快照 2019-10-12 上午9.46.26.png

屏幕快照 2019-10-12 上午9.51.07.png