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的值进行逻辑处理

上一篇下一篇

猜你喜欢

热点阅读