GCD—主队列

来源:互联网 发布:为什么淘宝比京东便宜 编辑:程序博客网 时间:2024/05/21 22:23

特点

  • 专门用来在主线程上调度任务的队列
  • 不会开启线程
  • 以先进先出的方式,在主线程空闲时才会调度队列中的任务在主线程执行
  • 如果当前主线程正在有任务执行,那么无论主队列中当前被添加了什么任务,都不会被调度

队列获取
- 主队列是负责在主线程调度任务的
- 会随着程序启动一起创建
- 主队列只需要获取不用创建

dispatch_queue_t queue = dispatch_get_main_queue();

  • 会造成死锁的情况
- (void)gcdDemo1{   dispatch_queue_t q = dispatch_get_main_queue();    NSLog(@"!!!!");    //同步 下面的代码必须执行了之后 才能继续执行后面的代码  但是主线程现在没空(没执行完gcdDemo1的代码 所以就会互相等待)    dispatch_sync(q, ^{        NSLog(@"%@",[NSThread currentThread]);    });}

解决的办法

    - (void)gcdDemo2{        NSLog(@"start");        // 获得主队列        dispatch_queue_t queue = dispatch_get_main_queue();        dispatch_async(dispatch_get_global_queue(0, 0), ^{            // 将任务同步添加到主队列中            dispatch_sync(queue, ^{                NSLog(@"%@",[NSThread currentThread]);            });        });        NSLog(@"over");}
0 0