码迷,mamicode.com
首页 > 其他好文 > 详细

dispatch_sync添加到viewDidLoad卡死问题理解

时间:2017-09-03 14:51:30      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:uil   UI   article   执行   一个   span   string   -o   dispatch   

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"1");
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2");
    });
    NSLog(@"3");
}


上面的代码只会打印1 然会就会线程卡死,这是为什么呢?

因为dispatch_get_main_queue()得到的是一个串行队列,串行队列的特点: 一次只调度一个任务,队列中的任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)

同步(sync) 操作,它会阻塞当前线程并等待 Block 中的任务执行完毕,然后当前线程才会继续往下运行

dispatch_sync提交一个打印任务NSLog(@”2”)到主线程关联的串行队列中,主线程关联的串行队列现在有一个viewDidLoad任务,打印任务NSLog(@”2”)排在viewDidLoad后面,队列FIFO(先进先出)的原则,打印任务NSLog(@”2”);想要得到执行必须等到viewDidLoad执行完毕后才能得到执行,但是viewDidLoad想要执行完毕必须要等打印任务NSLog(@”2”)执行完毕,所以就卡死在这了。

转自:http://blog.csdn.net/kongdeqin/article/details/53171678

dispatch_sync添加到viewDidLoad卡死问题理解

标签:uil   UI   article   执行   一个   span   string   -o   dispatch   

原文地址:http://www.cnblogs.com/huangzs/p/7469503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!