iOS网络开发(2)使用NSURLConnection
2016-03-02 13:06
585 查看
NSURLConnection介绍
NSURLConnection可以非常便捷的发送同步或异步网络请求
同步的网络请求
NSData数据类,从URL中获取数据创建对象的方法,就属于同步请求,其弊端是无法获得应答对象。
NSURLConnection提供类方法,快速发送一个异步请求
出参response:响应对象
出参error:错误对象(如果出错的话)
返回值:响应数据
如:请求获取一个图片资源
![](http://s5.51cto.com/wyfs02/M02/7C/B0/wKioL1bWYWXCkCajAAFpKulSO7c601.png)
同步请求的弊端:
请求过程耗时,会使当前线程阻塞,无法进行其他操作
特别是在主线程中调用时,此过程中App将无法进行任何UI操作。
异步的网络请求 — 与多线程配合
即,将同步请求的操作放在子线程中执行
需要注意的是:子线程不能更新UI,更新UI操作需要回到主线程中完成
如:使用GCD
![](http://s3.51cto.com/wyfs02/M00/7C/B2/wKiom1bWYSiRR1IWAAGvgpG5Ohs592.png)
异步的网络请求 — 发送异步请求方法
NSURLConnection提供了一个发送异步请求的方法
异步操作获得结果的操作通常有几种做法:代理、通知、block
该操作使用的是block方式,block中的参数通常是获得结果(响应对象、响应数据、错误对象)
![](http://s2.51cto.com/wyfs02/M01/7C/B0/wKioL1bWYc_zMXchAAHEY_g9J-k704.png)
异步的网络请求 — 使用代理监听请求过程
NSURLConnection对象包含一个代理属性
提供代理协议<NSURLConnectionDelegate><NSURLConnectionDataDelegate>
常用的代理方法:
![](http://s3.51cto.com/wyfs02/M00/7C/B2/wKiom1bWYZHhlNtYAAJJBxcwkZU631.png)
NSURLConnection可以非常便捷的发送同步或异步网络请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error + (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse *response, NSData *data, NSError *connectionError))handler出于各方面的考虑,苹果在iOS9.0开始弃用NSURLConnection,而是用NSURLSession代替。
同步的网络请求
NSData数据类,从URL中获取数据创建对象的方法,就属于同步请求,其弊端是无法获得应答对象。
NSURLConnection提供类方法,快速发送一个异步请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error入参request:请求对象(url、请求类型、请求参数)
出参response:响应对象
出参error:错误对象(如果出错的话)
返回值:响应数据
如:请求获取一个图片资源
![](http://s5.51cto.com/wyfs02/M02/7C/B0/wKioL1bWYWXCkCajAAFpKulSO7c601.png)
同步请求的弊端:
请求过程耗时,会使当前线程阻塞,无法进行其他操作
特别是在主线程中调用时,此过程中App将无法进行任何UI操作。
异步的网络请求 — 与多线程配合
即,将同步请求的操作放在子线程中执行
需要注意的是:子线程不能更新UI,更新UI操作需要回到主线程中完成
如:使用GCD
![](http://s3.51cto.com/wyfs02/M00/7C/B2/wKiom1bWYSiRR1IWAAGvgpG5Ohs592.png)
异步的网络请求 — 发送异步请求方法
NSURLConnection提供了一个发送异步请求的方法
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse *response, NSData *data, NSError *connectionError))handler异步操作,当前线程并不等待请求过程的完成,故不能通过参数或返回值获得结果
异步操作获得结果的操作通常有几种做法:代理、通知、block
该操作使用的是block方式,block中的参数通常是获得结果(响应对象、响应数据、错误对象)
![](http://s2.51cto.com/wyfs02/M01/7C/B0/wKioL1bWYc_zMXchAAHEY_g9J-k704.png)
异步的网络请求 — 使用代理监听请求过程
NSURLConnection对象包含一个代理属性
提供代理协议<NSURLConnectionDelegate><NSURLConnectionDataDelegate>
常用的代理方法:
// 接收到响应对象 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response // 收到部分或全部数据 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data // 完成响应数据的接收 - (void)connectionDidFinishLoading:(NSURLConnection *)connection // 请求失败 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error如:
![](http://s3.51cto.com/wyfs02/M00/7C/B2/wKiom1bWYZHhlNtYAAJJBxcwkZU631.png)
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- Lua下基本的网络编程示例
- APP添加CNZZ统计插件教程 Android版添加phonegap
- linux网络编程用到的网络函数详解用和使用示例
- C#网络编程基础之进程和线程详解
- C++ 网络编程 总结
- Linux网络编程之UDP Socket程序示例
- Android APP与媒体存储服务的交互
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法
- Android网络编程之UDP通信模型实例