很多從事iOS開發(fā)過程當(dāng)中很少聽到信號量,也很少用到,但是這個在小編看來是非常重要的思想。今天小編就來說說信號量以及信號量的完美替代品Bolts(Facebook出品的庫)。
先想想這樣一個場景:啟動app之后,需要先并發(fā)發(fā)送兩個數(shù)據(jù)請求requestA與requestB,同時這兩個數(shù)據(jù)請求還會做一些數(shù)據(jù)存儲方面的工作,然后當(dāng)requestA與requestB都完成之后,再做數(shù)據(jù)請求requestC。(記住一點:requestC一定要在requestA與requestB都完成之后才能執(zhí)行)。
以下是我找到的一個流程圖:

我們應(yīng)該知道這絕對是一個很常見的需求,很多人在看到這個需求是很自然的想到使用NSOperation+NSNotificationCenter來實現(xiàn),但是這樣就費盡了。
在小編看來:常見的需求與場景蘋果(或者其余的公司,比如谷歌,F(xiàn)acebook,微軟等)絕對也會想到了,畢竟他們公司的編程能力遠勝于我們。既然他們想到了,那必然在SDK當(dāng)中必然是集成了。
放到iOS開發(fā)當(dāng)中,蘋果就提供了一個方案那就是GCD信號量。
GCD信號量的使用涉及到三個方法,分別是:
1.dispatch_semaphore_create(創(chuàng)建一個信號量)
2.dispatch_semaphore_signal(發(fā)送一個信號)
3.dispatch_semaphore_wait(等待)
以下便是信號量的簡單使用:

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

由圖2可以看到線程3在線程1和線程2執(zhí)行完畢之后才執(zhí)行,這就是信號量的使用。此外,信號量還有很多功能,有時間的可以自行研究。
但是這樣寫的話我是看著不太習(xí)慣,而且這個也是需要寫邏輯的,很可能出現(xiàn)bug,比如少寫dispatch_semaphore_wait等。
信號量是給了這么一個解決問題的思路,很多第三方庫也是實現(xiàn)了此類的功能,其中Facebook出品的Bolts就是最好用的。
廢話不多說,直接上代碼:



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

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