标签:
一,NSURLConnection的简单实用
(一).简单请求过程
/// 1.创建url(资源路径) NSURL *url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/pic/item/d6ca7bcb0a46f21ff3649fbaf5246b600d33ae83.jpg"]; /// 2.创建请求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; /// 3.发送请求 // 3.1同步请求 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; /* data 处理 */ // 3.2异步请求 // 异步请求需要请求操作放到一个操作队列(queue)中 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
/* response,data,connectionError 处理 */
}];
代码说明
1.可以通过以下代码获取主队列(对应的请求在主线程,即使NSURLConnection发异步请求也是如此)。
NSOperationQueue *queue = [NSOperationQueue mainQueue];// 获取主队列
2.(3.1,3.2)的两个方法现在被苹果废弃了,取而代之的是NSURLSession的方法,NSURLSession可以说是NSURLConnection的替代品。
(二).数据解析(json/xml)
json解析(NSJSONSerialization)
// You use the NSJSONSerialization class to convert JSON to Foundation objects // and convert Foundation objects to JSON.(API) // 简言之,我们用 NSJSONSerialization 这个类 可进行json与oc对象之间的转换,方法如下: // 1.json 序列化成 oc对象 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; // 2.oc对象 转 json (不常用) [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:nil];
代码说明
1.通过网络请求获得的data(json数据)是二进制的数据流,我们需要将其转换成oc对象来进行操作。
xml解析(NSXMLParser)
<?xml version="1.0" encoding="UTF-8"?> // 文件声明(UTF-8编码) <students> // students、student、name、age都表示:元素(或节点) <student> // <name>ben</name> // ben、m、10表示:元素属性 <sex>m</sex> <age>10</age> </student> <student> <name>amy</name> <sex>f</sex> <age>9</age> </student> </students>
代码说明
1.这是一个简单的xml代码,包含了xml的三个基本组成部分(声明、节点、属性)
{
// 1.创建xml解析器(data是需要解析的数据) NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data]; // 2.设置代理 xmlParser.delegate = self; // 3.启动解析 [xmlParser parse];
// 4.解析完成,刷新UI
/* 刷新UI */;
// 取消解析(实现parser:parseErrorOccurred:方法)
// [xmlParser abortParsing];
}
#pragma mark - NSXMLParser delegate /// Sent by the parser object to the delegate when it begins parsing a document. /// 开始解析时调用 - (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"解析开始!"); } /// 开始解析元素(节点)市调用 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary<NSString *,NSString *> *)attributeDict { // 解析需要的元素 if ([elementName isEqualToString:@"student"]) { // attributeDict:contains any attributes associated with the element. // Keys are the names of attributes, and values are attribute values // 提取元素的属性 NSDictionary *dict = attributeDict; /* 在此进行数据字典dict的其他操作 */ } NSLog(@""); } /// completed parsing 时调用 - (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(@"解析完成!"); } /// 出现error的时候调用 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"解析错误!"); }
(三).POST和GET
// url NSURL *url = [[NSURL alloc] initWithString:@"http://f.hiphotos.baidu.com/****"]; // request // NSURLRequest创建的请求是get请求. // NSMutableURLRequest创建的请求默认也是get请求, // 需要调用HTTPMethod才能修改请求方式 NSURLRequest *request_get = [NSURLRequest requestWithURL:url]; // 1.创建request NSMutableURLRequest *request_post = [NSMutableURLRequest requestWithURL:url]; // 2.设置请求方法为 post request_post.HTTPMethod = @"POST"; // 3.设置请求体 // HTTPBody是NSData类型,param string需要转码 NSString *bodyParam = [NSString stringWithFormat:@"tel=%@&pwd=%@", tel, pwd]; request_post.HTTPBody = [bodyParam dataUsingEncoding:bodyParam]; /* 发送请求 */
代码说明
1.需要创建post请求需用到NSMutableURLRequest这个类并且需要设置其HTTPMethod为@"POST"。
二,NSURLSession的简单实用
// **** NSURLSession与NSURLConnection比较
// * NSURLSession 实例是个单例
// * NSURLSession 发送请求可直接用URL,不需要额外创建request
// * NSURLSession 需要创建任务(task)
// * NSURLSession 发送请求需要开启任务
/***** 普通请求 *****/ // 创建session NSURLSession *session =[NSURLSession sharedSession]; // 通过NSURL创建任务(task) NSURLSessionDataTask *task =[session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { /* data、response、error处理 */ }]; // 通过NSURLRequest创建任务(task /* NSURLSessionDataTask *task = [session dataTaskWithRequest:request_get completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { }]; */ // 任务开启 [task resume]; // 任务暂停 [task suspend];
/***** 下载文件 请求 *****/ // 创建session NSURLSession *session =[NSURLSession sharedSession]; // 用NSURL创建任务(task) NSURLSessionDownloadTask *task =[session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { /* data、response、error处理 */ }]; // 任务开启 [task resume]; // 任务暂停 [task suspend];
结语:
今天稍微介绍下NSURLConnection和NSURLSession的使用,对于网络请求这只是刚刚开始,后续将会介绍NSURLConnection和NSURLConnection的代理方法的使用,并会附带一些demo。
iOS开发-NSURLConnection和NSURLSession的简单实用
标签:
原文地址:http://www.cnblogs.com/joey-qi/p/4928484.html