简单说就是通过信号量来对block运算和返回操作的顺序进行控制,达到先完成block中的计算,然后再返回值的效果。
简单例子:
- (BOOL)example{
dispatch_semaphore_t signal;
signal =dispatch_semaphore_create(0);//当前signal车库中剩余0个车位
__block BOOL result;
[... completionHandler:^(BOOL blockResult, NSError *_Nullable error) {
//...
result = !blockResult;//Anything you want
dispatch_semaphore_signal(signal);//当前signal车库空出1个车位
}];
dispatch_semaphore_wait(signal,DISPATCH_TIME_FOREVER);//一直等到signal车库中有车位了,才会往下继续执行
return result;
}
对于信号量的举例解释是在其他文章看到的,觉得写得非常好所以借鉴过来自己存个根