很多從事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è)流程圖:

我們應(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)量的簡單使用:

執(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就是最好用的。
廢話不多說,直接上代碼:



使用Bolts實(shí)現(xiàn)多個(gè)數(shù)據(jù)請(qǐng)求并發(fā)就是這么簡單。
除此之外,Bolts還有更加廣泛的功能,比如:先執(zhí)行task1,task1成功之后再執(zhí)行task2。代碼如下:

github鏈接SemaphoreAndBolts,可以設(shè)置task1與task2中的isSuccess以及Bolts的官方文檔來綜合學(xué)習(xí)Bolts。
最后小編要說一句:Facebook出品,必屬精品。