关闭

GCD—主队列

标签: 线程
1041人阅读 评论(0) 收藏 举报
分类:

特点

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

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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:285743次
    • 积分:4491
    • 等级:
    • 排名:第6603名
    • 原创:169篇
    • 转载:1篇
    • 译文:0篇
    • 评论:45条
    博客专栏
    文章分类
    最新评论