iOS-淺談并發(fā)任務(wù)GCD信號(hào)量與其替代品Bolts(Facebook出品)

很多從事iOS開發(fā)過程當(dāng)中很少聽到信號(hào)量,也很少用到,但是這個(gè)在小編看來是非常重要的思想。今天小編就來說說信號(hào)量以及信號(hào)量的完美替代品Bolts(Facebook出品的庫)。

先想想這樣一個(gè)場(chǎng)景:啟動(dòng)app之后,需要先并發(fā)發(fā)送兩個(gè)數(shù)據(jù)請(qǐng)求requestA與requestB,同時(shí)這兩個(gè)數(shù)據(jù)請(qǐng)求還會(huì)做一些數(shù)據(jù)存儲(chǔ)方面的工作,然后當(dāng)requestA與requestB都完成之后,再做數(shù)據(jù)請(qǐng)求requestC。(記住一點(diǎn):requestC一定要在requestA與requestB都完成之后才能執(zhí)行)。

以下是我找到的一個(gè)流程圖:

圖1:流程圖

我們應(yīng)該知道這絕對(duì)是一個(gè)很常見的需求,很多人在看到這個(gè)需求是很自然的想到使用NSOperation+NSNotificationCenter來實(shí)現(xiàn),但是這樣就費(fèi)盡了。

在小編看來:常見的需求與場(chǎng)景蘋果(或者其余的公司,比如谷歌,F(xiàn)acebook,微軟等)絕對(duì)也會(huì)想到了,畢竟他們公司的編程能力遠(yuǎn)勝于我們。既然他們想到了,那必然在SDK當(dāng)中必然是集成了。

放到iOS開發(fā)當(dāng)中,蘋果就提供了一個(gè)方案那就是GCD信號(hào)量。

GCD信號(hào)量的使用涉及到三個(gè)方法,分別是:

1.dispatch_semaphore_create(創(chuàng)建一個(gè)信號(hào)量)

2.dispatch_semaphore_signal(發(fā)送一個(gè)信號(hào))

3.dispatch_semaphore_wait(等待)

以下便是信號(hào)量的簡單使用:

圖2:信號(hào)量的使用

執(zhí)行結(jié)果如下:

圖3:代碼執(zhí)行結(jié)果

由圖2可以看到線程3在線程1和線程2執(zhí)行完畢之后才執(zhí)行,這就是信號(hào)量的使用。此外,信號(hào)量還有很多功能,有時(shí)間的可以自行研究。

但是這樣寫的話我是看著不太習(xí)慣,而且這個(gè)也是需要寫邏輯的,很可能出現(xiàn)bug,比如少寫dispatch_semaphore_wait等。

信號(hào)量是給了這么一個(gè)解決問題的思路,很多第三方庫也是實(shí)現(xiàn)了此類的功能,其中Facebook出品的Bolts就是最好用的。

廢話不多說,直接上代碼:

圖4:數(shù)據(jù)請(qǐng)求1
圖5:數(shù)據(jù)請(qǐng)求2,同圖4
圖6:task1與task2并行執(zhí)行

使用Bolts實(shí)現(xiàn)多個(gè)數(shù)據(jù)請(qǐng)求并發(fā)就是這么簡單。

除此之外,Bolts還有更加廣泛的功能,比如:先執(zhí)行task1,task1成功之后再執(zhí)行task2。代碼如下:

圖7:task1與task2串行

github鏈接SemaphoreAndBolts,可以設(shè)置task1與task2中的isSuccess以及Bolts的官方文檔來綜合學(xué)習(xí)Bolts。

最后小編要說一句:Facebook出品,必屬精品。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容