您的位置:首页 > 移动开发 > IOS开发

AFNetWorking3.0 实现同步请求

2016-12-20 15:34 253 查看
首先说明一下我的使用场景:

在请求数据时,因为业务逻辑的关系,需要数据先回来才能下一步

因为是自己搭建的测试服务器,测试环境是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证书的问题,请另行查阅。以上只是个人的一点点见解,不喜勿喷,写得不是很详细,可能有错误或者漏洞,恳请大神斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息