1、GCD 简介

全名:Grand Central Dispatch,它是苹果为多核的并行运算提出的解决方案,会合理利用CPU、自动管理线程的生命周期。使用时只需要在Block中写入需要执行的代码即可。使用非常灵活。

1.1 GCD 死锁问题

-(void)gcd{
NSLog(@"test1");
dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"test2");
});
NSLog(@"test3");
} 

输出:

2019-02-23 16:12:36.353985+0800 GCDDemo[24815:1940432] 1

这样操作 GCD 会卡在 dispatch_sync(dispatch_get_main_queue(), ^{, 或者报异常
由于是主队列同步执行而且 block 是后下入主队列的,所以 block 会放到主队列的后面等待主队列执行完毕后再执行,所以 2 是放在 3 的后面的。但是主线程也在等 block 执行完毕,这样主线程才会继续执行。也就是说 3 又在等 2 执行完毕才会执行。所以出现了死锁。

未完待续

标签: iOS, 学习, 技术

评论已关闭