iOS网络: NSURLConnection进行异步请求
iOS SDK 允许我们向网络发送请求,并且能够很方便的通过 NSURLConnection 这个类 来获取和发送数据,我们可以通过 NSJSONSerialization 对 JSON 进行序列化和反序列化。 XML 的解析则使用 NSXMLParser 类。可以通过 Twitter 框架进行 Twitter 进行连接。
一 通过NSURLConnection进行异步下载
1. 创建一个 NSSring 类型的 URL 连接字符串。
2. 把 NSString 类型转化成 NSURL 类型。
3. 把我们的URL对象赋值到 NSURLRequest 对象中,如果是多个连接请求,请使用 NSMutableURLRequest.
completionHandler
这是一个 block 对象,当我们异步的连接操作完成之后,无论我们的异步操作是否成功,都会执行这个 block,这个 block 对象都能够接收到如下三个参数:
1).一个 NSURLResopne,这个对象封装了服务器返回给我们 response。
2).NSData,可选的,这个是我们通过 URL 请求返回的数据。
3).NSError 类型的对象,如果请求中有错误发生。
注意:
例子:
- (void)sendAsynNetWork{ NSString *urlString = @"http://www.apple.com"; NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //发送异步请求 [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if ([data length] > 0 && connectionError == nil) { NSString *html = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"HTML = %@",html); //保存从网络上下载的数据到你的硬盘中 //1.获取存储路径 NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; //将文件名添加到存储路径上,形成文件路径 NSString *filePath = [documentsDir stringByAppendingPathComponent:@"apple.html"]; //将数据写入文件 存到硬盘 [data writeToFile:filePath atomically:YES]; NSLog(@"Successfully saved the file to %@",filePath); } else if ([data length] == 0 && connectionError == nil){ NSLog(@"Nothing was downloaded"); } else if (connectionError != nil){ NSLog(@"connectionError happened = %@",connectionError); } }]; }
二. 处理异步连接中的超时
讨论:
这里详细看第二个参数 cachePolicy: 参数值在 NSURLRequestCachePolicy(缓存策略) 枚举中选择:
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
//设置更详细的request 第二个参数缓存策略 第三个参数最大等待时间 NSURLRequest *urlrequest1 = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:15.0f];
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。