performSelector:withObject:afterDelay:实现原理

-(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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容