核心概念: 1任務(wù)--執(zhí)行什么操作
? ? ? ? ? ? ? ?2隊列--用來存放任務(wù)
同步函數(shù): dispatch_sync( dispatch_queue_t ?queue,dispatch_block_t ?block);
異步函數(shù): dispatch_async( dispatch_queue_t? queue,dispatch_block_t? block);
并發(fā)隊列: 只能在異步方式下才有效
串行隊列: 讓任務(wù)一個接一個執(zhí)行
同步函數(shù)不能開啟新線程,在當(dāng)前線程中執(zhí)行
異步函數(shù)可以開啟新線程,在新線程中執(zhí)行
并發(fā)隊列多個任務(wù)同時執(zhí)行
串行隊列一個任務(wù)完成后再執(zhí)行下個任務(wù)
創(chuàng)建一個串行隊列: dispatch_queue_t ? queue=dispatch_queue_create("名字",null);
釋放創(chuàng)建的隊列: dispatch_release( queue );//MRC下需要釋放
GCD默認(rèn)提供了一個全局的并發(fā)隊列,供整個程序使用,不需要手動創(chuàng)建
隊列一://最高優(yōu)先級的并發(fā)隊列 ( 由第一個參數(shù)決定,下同 )
dispatch_queue_t queue1=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
隊列二://默認(rèn)優(yōu)先級的隊列
dispatch_queue_t queue2=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
隊列三://低優(yōu)先級的隊列
dispatch_queue_t queue3=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
隊列四://后臺執(zhí)行的隊列
dispatch_queue_t queue4=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
主隊列: 主隊列中的任務(wù)都會放在主線程中執(zhí)行,
獲得主隊列: dispatch_queue_t queue5=dispatch_get_main_queue();
異步函數(shù)下并發(fā)隊列會開多條線程
異步函數(shù)下串行隊列只會開一條線程
同步函數(shù)下都不會開線程
如果把任務(wù)放在主隊列中執(zhí)行,那么不論是同步還是異步都不會開新線程
static dispatch_once_t once;//這個可以實現(xiàn)一次性代碼,整個程序運行中只執(zhí)行一次
dispatch_once(&once, ^{
// 只執(zhí)行一次的代碼放在這
});
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"98989898");
});//三秒后在主線程執(zhí)行打印