如需轉(zhuǎn)載,請注明出處电爹,尊重他人勞動蔫仙,謝謝
GCD:Grand Central Dispatch (GCD)是Apple開發(fā)的一個多核編程的解決方法。是用C實(shí)現(xiàn)的丐箩,用起來很方便摇邦,而且很強(qiáng)大。
下面就來介紹GCD把屎勘。
1: 同步 和 異步 方法
1.1 同步? dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
第一個參數(shù):傳入一個隊(duì)列施籍,會吧block 任務(wù)加入到隊(duì)列
第二個block: 是需要執(zhí)行的任務(wù)代碼
同步方法 沒有創(chuàng)建線程的能力;
1.2 異步 dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
參數(shù)跟同步方法一樣概漱。但是異步方法有創(chuàng)建新線程的能力3笊鳌!
2: 隊(duì)列
2.1 串行隊(duì)列
第一個參數(shù): 是個C 的 參數(shù)瓤摧,就一個C類型的字符串
第二個參數(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);
也可用下面的方法
第一個第二個參數(shù) 給定 0姻灶,0 ?就行了铛绰,不要管它
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
好了。2中方法2中隊(duì)列产喉,那么有4種組合方式
3. 代碼捂掰。(不喜歡廢話,代碼先擼為敬)
3.1 異步+ 并發(fā)
看一下輸出結(jié)果吧:
看到了吧曾沈。number 是變動的这嚣,2、3塞俱、4, 說明創(chuàng)建了線程哦姐帚,線程的創(chuàng)建個數(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í)方法老是用這個
[self performSelector:<#(nonnull SEL)#> withObject:<#(nullable id)#> afterDelay:<#(NSTimeInterval)#>]
是不是很low系羞,來點(diǎn)高大上的GCD.
第一個參數(shù): 從什么時(shí)候開始,默認(rèn)的現(xiàn)在開始霸琴,不要管它
第二個參數(shù): 延時(shí)多久椒振,給它個時(shí)間,秒
第三個參數(shù):在哪個隊(duì)列中執(zhí)行梧乘。默認(rèn)主隊(duì)列澎迎,可以根據(jù)你的需要修改
第四個: 任務(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)建一個 定時(shí)器夹供,那么現(xiàn)在可以用 GCD 定時(shí)器,精準(zhǔn)度很高仁堪。還有個很大的優(yōu)點(diǎn) : GCD定時(shí)器不受RunLoop約束哮洽,比NSTimer更加準(zhǔn)時(shí)。
就這么強(qiáng)大弦聂,簡單鸟辅。
6. GCD 一次性函數(shù)
應(yīng)用場景: 單例。 表示只創(chuàng)建一次莺葫,不多說匪凉,很簡單
就寫到這兒,有時(shí)間再去跟新其它GCD幾個函數(shù).謝謝大家的閱讀捺檬,共同提高能力再层!歡迎老司機(jī)指點(diǎn)