特點(diǎn)
專門用來在主線程上調(diào)度任務(wù)的隊(duì)列
不會(huì)開啟線程
以先進(jìn)先出的方式鲫售,在主線程空閑時(shí)才會(huì)調(diào)度隊(duì)列中的任務(wù)在主線程執(zhí)行
如果當(dāng)前主線程正在有任務(wù)執(zhí)行煤墙,那么無論主隊(duì)列中當(dāng)前被添加了什么任務(wù)栈虚,都不會(huì)被調(diào)度
隊(duì)列獲取
- 主隊(duì)列是負(fù)責(zé)在主線程調(diào)度任務(wù)的
- 會(huì)隨著程序啟動(dòng)一起創(chuàng)建
- 主隊(duì)列只需要獲取不用創(chuàng)建
dispatch_queue_t queue = dispatch_get_main_queue();
1
會(huì)造成死鎖的情況
- (void)gcdDemo1
{
dispatch_queue_t q = dispatch_get_main_queue();
NSLog(@"!!!!");
//同步 下面的代碼必須執(zhí)行了之后 才能繼續(xù)執(zhí)行后面的代碼? 但是主線程現(xiàn)在沒空(沒執(zhí)行完gcdDemo1的代碼 所以就會(huì)互相等待)
dispatch_sync(q, ^{
NSLog(@"%@",[NSThread currentThread]);
});
}
解決的辦法
- (void)gcdDemo2{
NSLog(@"start");
// 獲得主隊(duì)列
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 將任務(wù)同步添加到主隊(duì)列中
dispatch_sync(queue, ^{
NSLog(@"%@",[NSThread currentThread]);
});
});
NSLog(@"over");
}