NSURLSession和NSURLConnection
iOS9.0之后NSURLConnection被注销,采用NSURLSession,先介绍NSURLSession,然后介绍NSURLConnection
1.NSURLSession:
post请求:
//1.NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];request.HTTPMethod=@"POST";request.HTTPBody = [@"" dataUsingEncoding:NSUTF8StringEncoding];//2.NSURLSession *session=[NSURLSession sharedSession];NSURLSessionDataTask *dataTask= [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {NSLog(@"NSURLSession加载数据。。。。post。。。。。%@",data);}];//3.[dataTask resume];
创建请求并设置代理delegate:(NSURLSessionDataDelegate)
//1.确定请求路径NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];//2.创建请求对象//请求对象内部默认已经包含了请求头和请求方法(GET)NSURLRequest *request = [NSURLRequest requestWithURL:url];//3.获得会话对象,并设置代理/*第一个参数:会话对象的配置信息defaultSessionConfiguration 表示默认配置第二个参数:谁成为代理,此处为控制器本身即self第三个参数:队列,该队列决定代理方法在哪个线程中调用,可以传主队列|非主队列[NSOperationQueue mainQueue] 主队列: 代理方法在主线程中调用[[NSOperationQueue alloc]init] 非主队列: 代理方法在子线程中调用 */NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];//4.根据会话对象创建一个Task(发送请求)NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];//5.执行任务[dataTask resume];
delegate协议方法:
//1.接收到服务器响应的时候调用该方法 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{//在该方法中可以得到响应头信息,即responseNSLog(@"didReceiveResponse--%@",[NSThread currentThread]);completionHandler(NSURLSessionResponseAllow);//注意:需要使用completionHandler回调告诉系统应该如何处理服务器返回的数据//默认是取消的/*NSURLSessionResponseCancel = 0, 默认的处理方式,取消NSURLSessionResponseAllow = 1, 接收服务器返回的数据NSURLSessionResponseBecomeDownload = 2,变成一个下载请求NSURLSessionResponseBecomeStream 变成一个流*/ }//2.接收到服务器返回数据的时候会调用该方法,如果数据较大那么该方法可能会调用多次 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{NSLog(@"didReceiveData--%@",[NSThread currentThread]);//拼接服务器返回的数据 } //3.当请求完成(成功|失败)的时候会调用该方法,如果请求失败,则error有值-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {NSLog(@"didCompleteWithError--%@",[NSThread currentThread]);if(error == nil){//解析数据,JSON解析请参考 }}
2.NSURLConnection
普通请求:
/* //1.网址NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];//2.请求NSURLRequest *request=[NSURLRequest requestWithURL:url];//3.队列NSOperationQueue *queue=[[NSOperationQueue alloc]init];//4.发送异步请求[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * response, NSData * data, NSError * connectionError) {NSString *content=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"加载成功:%@",content);}];*///同步发送,要放到另一个线程里,防止阻塞;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];NSURLResponse *response;NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];//&指的是指针;NSString *content=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"NSURLConnection加载数据。。。。。。。:%@",content);});
代理请求:(NSURLConnectionDataDelegate)
NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];// NSURLResponse *response; [NSURLConnection connectionWithRequest:request delegate:self];
代理协议方法:
// -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{NSLog(@"接到response"); }// -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{NSLog(@"接收数据");}// -(void)connectionDidFinishLoading:(NSURLConnection *)connection{NSLog(@"接收数据完成");}
参考网址:http://www.cnblogs.com/wendingding/p/5168772.html
转载于:https://www.cnblogs.com/sunjianfei/p/5570578.html
NSURLSession和NSURLConnection相关推荐
- NSURLSession使用说明及后台工作流程分析
NSURLSession简介 NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnect ...
- NSURLSession
2019独角兽企业重金招聘Python工程师标准>>> //1.创建一个网络处理的会话,取得一个全局的会话//好处(相对于NSURLSession)1,多个网络任务可以通过sessi ...
- Swift - 使用NSURLSession同步获取数据(通过添加信号量)
过去通过 NSURLConnection.sendSynchronousRequest() 方法能同步请求数据.从iOS9起,苹果建议废除 NSURLConnection,使用 NSURLSessio ...
- 【iOS】使用NSURLSession网络请求
文章目录 前言 NSURLSession NSURLSession替换NSURLConnection Get请求 流程 1. 确定请求路径 2. 创建请求对象 3. 获得会话对象 4. 根据会话对象创 ...
- iOS基础问答面试题连载-附答案
2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...
- 快过年了,为过完年跳槽的人准备一份面试题
设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情. 1). MVC模式:Model View Control,把模型 视图 控制器 ...
- iOS 开发中使用 NSURLProtocol 拦截 HTTP 请求
这篇文章会提供一种在 Cocoa 层拦截所有 HTTP 请求的方法,其实标题已经说明了拦截 HTTP 请求需要的了解的就是 NSURLProtocol. 由于文章的内容较长,会分成两部分,这篇文章介绍 ...
- URLCache探索
了解NSURLCahe NSURLCache类用NSURLRequest对象和NSCachedURLResponse对象的一对一映射关系实现了请求数据的缓存.它同时提供内存缓存和硬盘缓存,你可以分别自 ...
- iOS应用如何支持IPV6
本文转自 http://www.code4app.com/forum.php?mod=viewthread&tid=8427&highlight=ipv6 果然是苹果打个哈欠,iOS行 ...
最新文章
- API网关是否真的起到了它该有的作用?
- 一道泄露并遭禁用的谷歌面试题,背后玄机全解析
- 在线学习与离线学习如何区分
- 【windows phone】CollectionViewSource的妙用
- 【Python】Python中的类型转换
- MySQL:too many connections
- 浙江哪个地方的杨梅最出名?
- Spark源码分析之二:Job的调度模型与运行反馈
- python代码大全-python贪吃蛇游戏代码
- 小米8android版本打开,怎么查看小米手机安卓系统版本
- 让HTML标签title属性值换行
- 拓端tecdat|Python用稀疏、高斯随机投影和主成分分析PCA对MNIST手写数字数据进行降维可视化
- 汇编 十六进制转二进制
- 2017年第八届CSTQB®国际软件测试高峰论坛议题征集启动
- LaTex 常用的数学字体
- 需要在计算机安装msxml版本,Office2010安装需要MSXML版本6.10.1129.0的方法
- 【数据库 Mysql查询系列】--检索出stu表中‘计算机工程’或‘软件工程’专业的学生的记录,结果集按学号升序排序。
- 冷月手撕408之计算机组成原理(1)-导学
- unity跑酷怎么添加金币_【Unity3D实战】零基础一步一步教你制作跑酷类游戏(填坑完整版)...
- IBM DB2数据库实战培训课程(2天速成版)视频教程
热门文章
- tomcat的JK和JK2
- jquery 3D分页翻转滑块
- 最大公共子串提取“模式”
- delphi编程模拟发送QQ2008消息!
- Storm的StreamID使用样例(版本1.0.2)
- 自定义分页(模块化)
- 美萍超市销售管理系统标准版access数据库密码mp611
- 8.继续分析一破解加密码获取-最最最简单的注册机
- 操作系统原理第四章:线程
- 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )