主要用途是GCD中快速的控制并發(fā),也就是我們想等代碼塊內(nèi)容執(zhí)行完畢再執(zhí)行下一步操作
在GCD中有三個(gè)函數(shù)是semaphore的操作罩润,分別是:
dispatch_semaphore_create 創(chuàng)建一個(gè)semaphore
dispatch_semaphore_signal 發(fā)送一個(gè)信號(hào)
dispatch_semaphore_wait 等待信號(hào)
簡(jiǎn)單的介紹一下這三個(gè)函數(shù)肮街,
dispatch_semaphore_create有一個(gè)整形的參數(shù)熏挎,我們可以理解為信號(hào)的總量
dispatch_semaphore_signal是發(fā)送一個(gè)信號(hào)凝垛,自然會(huì)讓信號(hào)總量加1
dispatch_semaphore_wait等待信號(hào)敦间,當(dāng)信號(hào)總量少于0的時(shí)候就會(huì)一直等待,否則就可以正常的執(zhí)行娜亿,并讓信號(hào)總量-1
例子
//crate的value表示丽已,最多幾個(gè)資源可訪問(wèn),想等多少個(gè)代碼塊結(jié)束就寫(xiě)多少
????dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);???
__block CLPlacemark* start;
? ? [self.viewModel getAddressString:_textfiled.text completionHandler:^(NSArray *placemarks, NSError *error) { ? ??
?????? //發(fā)出已完成的信號(hào)
????????dispatch_semaphore_signal(semaphore);
? ? }];
????//等待執(zhí)行买决,不會(huì)占用資源
????dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);