GCD信号量的使用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容