您的位置:首页 > 其它

关于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: