GCD信号量的使用
2017-11-12 本文已影响9人
吓死宝宝了啊
dispatch_semaphore_t可以阻塞线程
dispatch_semaphore_t的使用场景:有三个界面A、B、C,A界面上有一个按钮点击之后会发送一个网络请求,判断用户是否有权限进入B界面,有权限就跳转到B,无权限就跳转到C,在请求没有收到回调之前需要阻塞该线程。
__block BOOL isComplete = NO;
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//处理逻辑 对isComplete进行赋值
dispatch_semaphore_signal(sema); //发送信号
}];
[task resume];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);//阻塞线程
//当网络请求结束后,根据isComplete的值进行逻辑处理