步骤
NSURL:确定要访问的资源
NSURLRequest:根据URL建立请求,向服务器索要数据
NSURLConnection:建立网络连接,将请求(异步)发送给服务器
示例代码
// 1. `NSURL`:确定要访问的资源
NSURL*url = [NSURLURLWithString:@"http://m.baidu.com"];
// 2. `NSURLRequest`:根据 `URL` 建立请求,向服务器索要数据
NSURLRequest*request = [NSURLRequestrequestWithURL:url];
// 3. `NSURLConnection`:建立网络连接,将请求(异步)发送给服务器[NSURLConnectionsendAsynchronousRequest: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;
}
请求
1.基于URL建立请求
2.设置请求属性:缓存策略,网络超时时长
3.告诉服务器额外信息:客户端类型,身份验证...
// 告诉服务器,客户端的类型是 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秒