主要用途是GCD中快速的控制并发,也就是我们想等代码块内容执行完毕再执行下一步操作
在GCD中有三个函数是semaphore的操作,分别是:
dispatch_semaphore_create 创建一个semaphore
dispatch_semaphore_signal 发送一个信号
dispatch_semaphore_wait 等待信号
简单的介绍一下这三个函数,
dispatch_semaphore_create有一个整形的参数,我们可以理解为信号的总量
dispatch_semaphore_signal是发送一个信号,自然会让信号总量加1
dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,否则就可以正常的执行,并让信号总量-1
例子
//crate的value表示,最多几个资源可访问,想等多少个代码块结束就写多少
dispatch_semaphore_t semaphore = dispatch_semaphore_create(2);
__block CLPlacemark* start;
[self.viewModel getAddressString:_textfiled.text completionHandler:^(NSArray *placemarks, NSError *error) {
//发出已完成的信号
dispatch_semaphore_signal(semaphore);
}];
//等待执行,不会占用资源
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);