AFNetWorking3.0 实现同步请求

来源:互联网 发布:开心麻花网络剧 编辑:程序博客网 时间:2024/06/05 16:14

首先说明一下我的使用场景:

  • 在请求数据时,因为业务逻辑的关系,需要数据先回来才能下一步
  • 因为是自己搭建的测试服务器,测试环境是http,但是苹果对http使用是有限制的,我需要暂时不做ssl证书的验证

好,下面来说一下实现方式:

一开始,我是用官方的API来实现同步请求的,

NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

但是,这样子有个问题,如果是http的请求,会报错。
如果是异步请求,要解决这个报错的问题,需要监听NSURLConnectionDelegate代理方法,但是同步请求是设置不了代理来监听的,所以只能换NSURLSessionTask了。这里又有一个问题,它是没有同步请求,只能是发起异步请求,最后决定用信号量来控制:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //创建信号量NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc]init]];NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {            if (!error) {                //请求失败            }else{                //请求成功            }            dispatch_semaphore_signal(semaphore);//不管请求状态是什么,都得发送信号,否则会一直卡着进程        }];        [task resume];        dispatch_semaphore_wait(semaphore,DISPATCH_TIME_FOREVER);  //等待

关于如何忽略Https证书的问题,请另行查阅。以上只是个人的一点点见解,不喜勿喷,写得不是很详细,可能有错误或者漏洞,恳请大神斧正。

1 0
原创粉丝点击