特点
专门用来在主线程上调度任务的队列
不会开启线程
以先进先出的方式,在主线程空闲时才会调度队列中的任务在主线程执行
如果当前主线程正在有任务执行,那么无论主队列中当前被添加了什么任务,都不会被调度
队列获取
- 主队列是负责在主线程调度任务的
- 会随着程序启动一起创建
- 主队列只需要获取不用创建
dispatch_queue_t queue = dispatch_get_main_queue();
1
会造成死锁的情况
- (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");
}
网友评论