iOS performSelector 实现原理

2019-08-29 10:20:10 浏览数 (3)

首先我们来看看下面的程序输出什么?

代码语言:javascript复制
- (IBAction)btnAction:(id)sender {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"1");
        [self performSelector:@selector(test) withObject:nil afterDelay:0];
        NSLog(@"2");
    });
}

- (void)test
{
    NSLog(@"3");
}

答案是只打印:1、2

因为[self performSelector:@selector(test) withObject:nil afterDelay:.0]实际在runloop里面,是一个定时器,但是因为在子线程,runloop是默认没有开启的。

实现原理:

当调用 NSObject 的 performSelecter:afterDelay: 后,实际上其内部会创建一个 Timer 并添加到当前线程的 RunLoop 中。所以如果当前线程没有 RunLoop,则这个方法会失效。

0 人点赞