美文网首页
GCD信号量的使用

GCD信号量的使用

作者: 吓死宝宝了啊 | 来源:发表于2017-11-12 22:06 被阅读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的值进行逻辑处理

    相关文章

      网友评论

          本文标题:GCD信号量的使用

          本文链接:https://www.haomeiwen.com/subject/zdgomxtx.html