如需轉(zhuǎn)載,請注明出處,尊重他人勞動(dòng),謝謝
GCD:Grand Central Dispatch (GCD)是Apple開發(fā)的一個(gè)多核編程的解決方法。是用C實(shí)現(xiàn)的,用起來很方便,而且很強(qiáng)大。
下面就來介紹GCD把。
1: 同步 和 異步 方法
1.1 同步? dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
第一個(gè)參數(shù):傳入一個(gè)隊(duì)列,會(huì)吧block 任務(wù)加入到隊(duì)列
第二個(gè)block: 是需要執(zhí)行的任務(wù)代碼
同步方法 沒有創(chuàng)建線程的能力;
1.2 異步 dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
參數(shù)跟同步方法一樣。但是異步方法有創(chuàng)建新線程的能力??!
2: 隊(duì)列
2.1 串行隊(duì)列
第一個(gè)參數(shù): 是個(gè)C 的 參數(shù),就一個(gè)C類型的字符串
第二個(gè)參數(shù):創(chuàng)建什么類型的隊(duì)列。DISPATCH_QUEUE_SERIAL 為串行
dispatch_queue_t quue =? dispatch_queue_create("com.joyfun.yg", DISPATCH_QUEUE_SERIAL);
2.2 并發(fā)隊(duì)列
參數(shù)跟上面一樣。DISPATCH_QUEUE_CONCURRENT 為并發(fā)隊(duì)列
dispatch_queue_t quue =? dispatch_queue_create("com.joyfun.yg", DISPATCH_QUEUE_CONCURRENT);
也可用下面的方法
第一個(gè)第二個(gè)參數(shù) 給定 0,0 ?就行了,不要管它
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
好了。2中方法2中隊(duì)列,那么有4種組合方式
3. 代碼。(不喜歡廢話,代碼先擼為敬)
3.1 異步+ 并發(fā)

看一下輸出結(jié)果吧:

看到了吧。number 是變動(dòng)的,2、3、4, 說明創(chuàng)建了線程哦,線程的創(chuàng)建個(gè)數(shù),由系統(tǒng)決定,看 a.b.c 是說明它是并發(fā)的哦,不是按照循序執(zhí)行的。
3.2 異步+ 串行

運(yùn)行起來:

注意到 number = 2 ?,創(chuàng)建了新線程了,再看a.b.c,是按照添加的循序執(zhí)行的,說明是串行的哦。
3.3 同步+并發(fā)


number =1 ,name=main, 是主線程啦。說明同步方法沒有能力創(chuàng)建線程,a、b、c是按照循序執(zhí)行的,說明 并發(fā) 只能在異步方法里面有效。
3.4 同步+ 串行

呀買碟。結(jié)果跟上面一樣。記住啦。
4. GCD延時(shí)
之前咱們調(diào)用延時(shí)方法老是用這個(gè)
[self performSelector:<#(nonnull SEL)#> withObject:<#(nullable id)#> afterDelay:<#(NSTimeInterval)#>]
是不是很low,來點(diǎn)高大上的GCD.
第一個(gè)參數(shù): 從什么時(shí)候開始,默認(rèn)的現(xiàn)在開始,不要管它
第二個(gè)參數(shù): 延時(shí)多久,給它個(gè)時(shí)間,秒
第三個(gè)參數(shù):在哪個(gè)隊(duì)列中執(zhí)行。默認(rèn)主隊(duì)列,可以根據(jù)你的需要修改
第四個(gè): 任務(wù),寫你需要做的事情
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
<#code to be executed after a specified delay#>
});

效果跟以前的performSelector 一樣吧。用起來
5. GCD Timer
以前用定時(shí)器喜歡用 NSTimer 去創(chuàng)建一個(gè) 定時(shí)器,那么現(xiàn)在可以用 GCD 定時(shí)器,精準(zhǔn)度很高。還有個(gè)很大的優(yōu)點(diǎn) : GCD定時(shí)器不受RunLoop約束,比NSTimer更加準(zhǔn)時(shí)。

就這么強(qiáng)大,簡單。
6. GCD 一次性函數(shù)
應(yīng)用場景: 單例。 表示只創(chuàng)建一次,不多說,很簡單

就寫到這兒,有時(shí)間再去跟新其它GCD幾個(gè)函數(shù).謝謝大家的閱讀,共同提高能力!歡迎老司機(jī)指點(diǎn)