GCD學(xué)習(xí)二
一炒瘸。隊(duì)列有哪幾種呢淤堵?
1.1、自定義的隊(duì)列 :dispatch_queue_create
1.2顷扩、系統(tǒng)自帶的隊(duì)列:
??? 1.2.1拐邪、主隊(duì)列 Main Dispatch Queue
??? 1.2.2、全局隊(duì)列 Global Dispatch Queue (3個(gè)優(yōu)先級(jí)+I/O)
注意:在自定義隊(duì)列中被調(diào)度的所有 block 最終都將被放入到系統(tǒng)的全局隊(duì)列中和線程池中隘截。
1.1扎阶、自定義隊(duì)列
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",NULL);
第一個(gè)參數(shù)是隊(duì)列的名稱,要易懂
第二個(gè)參數(shù):NULL表示串行隊(duì)列婶芭,DISPATCH_QUEUE_CONCURRENT表示并行隊(duì)列
注意:同步隊(duì)列可生成任意多個(gè)东臀,并放到異步線程執(zhí)行的時(shí)候,如果個(gè)數(shù)太多犀农,會(huì)出現(xiàn)內(nèi)存大量消耗啡邑,影響性能。要控制隊(duì)列個(gè)數(shù)井赌。如圖:
那什么時(shí)候該使用同步線程呢谤逼?當(dāng)出現(xiàn)并發(fā)隊(duì)列競(jìng)爭(zhēng)同一個(gè)資源的時(shí)候,我們可以用同步線程去控制仇穗。
1.2流部、系統(tǒng)自帶的隊(duì)列
1、Main Dispatch Queue:
dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();
dispatch_async((mainDispatchQueue,^{//主線程處理}));
該方法的處理與NSObject類的performSelectorOnMainThread實(shí)例方法一樣纹坐。
2枝冀、Global Dispatch Queue
dispatch_queue_t globalDispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
第一個(gè)參數(shù)有四種:都是并行隊(duì)列
DISPATCH_QUEUE_PRIORITY_DEFAULT 默認(rèn)等級(jí)
DISPATCH_QUEUE_PRIORITY_HIGH 最高等級(jí)
DISPATCH_QUEUE_PRIORITY_LOW 最低等級(jí)
DISPATCH_QUEUE_PRIORITY_BACKGROUND 后臺(tái)運(yùn)行,更低等級(jí)
第二個(gè)參數(shù):一般是0
一般代碼執(zhí)行:
dispatch_async((dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
??? //可并行執(zhí)行處理代碼
??? // 在main dispatch queue中執(zhí)行block
??? dispatch_async(dispatch_get_main_queue(),^{
??? // 只能在主線程中執(zhí)行處理
??? });
}));