- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait

一个例子解释这个方法的意思
performSelectorOnMainThread:回到主线程
waitUntilDone:这个意思看下面的例子

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
       
        NSLog(@"线程1 start");
        
        /**
         回到主线程
         waitUntilDone:YES:必须执行完主线程才能往下走
                         NO:不需要执行完主线程,可以先往下走
         */
        [self performSelectorOnMainThread:@selector(test1) withObject:nil waitUntilDone:NO];
        NSLog(@"线程1 end");
    });
}

- (void)test1 {
    
    sleep(1);
    NSLog(@"主线程 结束");
}

当 waitUntilDone:NO
打印的结果:
2017-02-16 11:16:33.837 Test[1189:30481] 线程1 start
2017-02-16 11:16:33.838 Test[1189:30481] 线程1 end
2017-02-16 11:16:34.872 Test[1189:30426] 主线程 tes1
当 waitUntilDone:YES
2017-02-16 11:21:29.292 Test[1242:32960] 线程1 start
2017-02-16 11:21:30.364 Test[1242:32922] 主线程 结束
2017-02-16 11:21:30.365 Test[1242:32960] 线程1 end

一幕了然,其实当waitUntilDone:YES ,是用到了 RunLoop的知识,让其一直在等待 直到完成,才往下走。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容