关于NSURLConnection的理解的和Demo
2015-10-21 00:17
495 查看
步骤(iOS9后该方法被废弃,改用NSURlSession)
NSURL:确定要访问的资源
NSURLRequest:根据
URL建立请求,向服务器索要数据
NSURLConnection:建立网络连接,将请求(异步)发送给服务器
示例代码
// 1. `NSURL`:确定要访问的资源 NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"]; // 2. `NSURLRequest`:根据 `URL` 建立请求,向服务器索要数据 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 3. `NSURLConnection`:建立网络连接,将请求(异步)发送给服务器 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSLog(@"%@", data); }];
NSURLConnection
代码小结
sendAsynchronousRequest
发送异步请求
此方法就是异步执行的,程序员无序考虑开启线程,或者创建队列会将之前建立好的请求
异步发送给服务器
等到接收到服务器响应后,由
queue负责调度
completionHandler的执行
队列
调度completionHandler执行的队列
[[NSOperationQueue alloc] init],后台线程异步执行
[NSOperationQueue mainQueue],主线程异步执行
队列的选择
如果要对数据进行耗时处理,例如:解压缩等,选择新建队列调度
如果只是做简单处理,立即更新 UI,选择主队列
completionHandler
网络访问已经结束,接收到服务器响应数据后的回调方法response,服务器的响应,通常在开发
下载功能时才会使用
响应属性 | 说明 |
---|---|
URL | 服务器反馈的 URL,有的时候,服务器会重定向新的 URL |
MIMEType | 服务器告诉客户端,返回的二进制数据的类型ContentType 根据 MIMEType 客户端就知道使用什么软件处理返回的二进制数据 网络之所以这么丰富多彩,是因为有非常多的客户端软件 |
statusCode | 状态码 1XX消息 2XX 成功 3XX 更多选择 4XX 客户端错误 5XX 服务器错误 |
expectedContentLength | 数据长度,下载文件总长度 |
suggestedFilename | 建议的文件名 |
data服务器返回的二进制数据,程序员最关心的内容
connectionError连接错误,任何网络访问都有可能出现错误
// 标准的错误处理方法 if (connectionError || data == nil) { NSLog(@"网络不给力!"); return; }
请求
基于URL建立请求
设置请求属性:
缓存策略,
网络超时时长
告诉服务器额外信息:
客户端类型,
身份验证...
// 告诉服务器,客户端的类型是 iPhone,而且支持 AppleWebKit [request setValue:@"iPhone AppleWebKit" forHTTPHeaderField:@"User-Agent"];
缓存策略
枚举 | 数值 | 说明 |
---|---|---|
NSURLRequestUseProtocolCachePolicy | 0 | 默认的缓存策略 |
NSURLRequestReloadIgnoringLocalCacheData | 1 | 忽略本地缓存数据,始终加载服务器的数据 对数据的及时性要求高的应用 例如:彩票、股票等 |
NSURLRequestReturnCacheDataElseLoad | 2 | 如果有缓存,就返回缓存,否则加载数据 |
NSURLRequestReturnCacheDataDontLoad | 3 | 如果有缓存,就返回缓存,否则不加载 |
超时时长
默认网络时长是60 s
建议超时时长
15~30秒之间
注意超时时长不能太短
SDWebImage的默认超时时长是
15秒
AFN的默认超时时长是
60秒
相关文章推荐
- 最简单的mfc程序
- 数据结构: 无向图和有向图的API
- ASP.NET - 使用 XML
- UIview基本
- leetcode之Search a 2D Matrix
- 软件架构师应该知道的97件事之概括1-15
- C/S结构
- pycharm+QT4的helloworld
- HDU 5451 Best Solver (2015年沈阳赛区网络赛B题)
- 在OC中关于URL和HTTP的理解
- python例子-开始一个Django项目
- Nginx指南和配置详解
- printf在终端输出时改变颜色
- OData
- AsyncTask的学习
- 如何配置Apache服务器
- mybatis-config配置文档
- offset()值不准问题
- 网址收集
- 使用静态内部类提高封装性