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
- AFNetWorking3.0 实现同步请求
- AFNetworking3.0 POST请求
- AFNetworking3.0网络请求
- AFnetworking3.0的网络请求
- AFNetworking3同步请求另类解决方案(阻塞线程)
- 用AFNetworking3.0封装网络请求
- 用AFNetworking3.0封装网络请求
- AFNetworking3.0使用 ,Post数据请求
- 使用AFNetworking3.0发送http请求
- AFNetworking3.0 如何取消单个网络请求
- 网络请求-AFNetworking3.0使用简介
- 用AFNetworking3.0封装网络请求
- 使用AFNetworking3.0封装网络请求
- ios中afnetworking3.0网络请求
- ios AFNetworking3.0 请求网络数据
- AFNetWorking3.0处理请求头和请求内容
- AFNetWorking3.0 处理请求头 和 请求内容
- AFNetworking3.1 POST 请求
- android 常见死机问题--log分析
- [LeetCode]86. Partition List
- 中科断网神器,给你前所未有过的功能体验
- 深入理解javascript原型和闭包(1)——一切都是对象
- 程序员的鄙视链-------哈哈哈,真逗
- AFNetWorking3.0 实现同步请求
- adb devices链接不上的问题
- Ubuntu下安装Komoto Edit 并配置运行python代码
- android实现类似于订单流程图界面
- Apache Log4j配置说明/log4j的分层打印
- markdown总结
- 【NOIP2017提高组模拟12.18】C
- android自定义View&自定义ViewGroup(下)
- BigDecimal 加减乘除