iOS 网络

一.简单介绍

iOS7之后新加了NSURLSession来处理网络请求
NSURLSession 优势

  • 后台上传和下载:只需在创建NSURLSession的时候配置一个选项,就能得到后台网络的所有好处。这样可以延长电池寿命,并且还支持UIKit的多task,在进程间使用相同的委托模型。
  • 能够暂停和恢复网络操作:使用NSURLSession API能够暂停,停止,恢复所有的网络任务,再也完全不需要子类化NSOperation。
  • 可配置的容器:对于NSURLSession里面的requests来说,每个NSURLSession都是可配置的容器。举个例来说,假如你需要设置HTTP header选项,你只用做一次,session里面的每个request就会有同样的配置。
  • 提高认证处理:认证是在一个指定的连接基础上完成的。在使用NSURLConnection时,如果发出一个访问,会返回一个任意的request。此时,你就不能确切的知道哪个request收到了访问。而在NSURLSession中,就能用代理处理认证。
  • 丰富的代理模式:在处理认证的时候,NSURLConnection有一些基于异步的block方法,但是它的代理方法就不能处理认证,不管请求是成功或是失败。在NSURLSession中,可以混合使用代理和block方法处理认证。
  • 上传和下载通过文件系统:它鼓励将数据(文件内容)从元数据(URL和settings)中分离出来。

二.过程

1.NSURL 2.NSURLRequest 3.NSURLSession 4.NSURLSessionDataTask

iOS 网络_第1张图片

NSURLSessionTask继承关系

三.例子

  1. get请求
-(void)getRequest
{
NSString*webPath = [NSStringstringWithFormat:@"http://gc.ditu.aliyun.com/geocoding?a=泰州市"];
webPath = [webPathstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]];
NSURL*url = [NSURLURLWithString:webPath];
NSURLRequest*request =[NSURLRequestrequestWithURL:url];
NSURLSession*session = [NSURLSessionsharedSession];
NSURLSessionDataTask*dataTask = [sessiondataTaskWithRequest:requestcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {
if(error ==nil){
NSDictionary*dic = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableContainerserror:nil];
NSLog(@"%@",dic);
}
}];
[dataTaskresume];
}
  1. post请求
-(void)postRequest
{
NSString*webPath = [NSStringstringWithFormat:@"http://gc.ditu.aliyun.com/geocoding?a=泰州市"];
webPath = [webPathstringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]];
NSURL*url = [NSURLURLWithString:webPath];
NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];
request.HTTPMethod=@"post";
request.HTTPBody= [@"a=台州市"dataUsingEncoding:NSUTF8StringEncoding];
NSURLSession*session = [NSURLSessionsharedSession];
NSURLSessionDataTask*dataTask = [sessiondataTaskWithRequest:requestcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {
if(error ==nil){
NSDictionary*dic = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableContainerserror:nil];
NSLog(@"%@",dic);
}
}];
[dataTaskresume];
}
  1. 下载文件
-(void)downloadRequest
{
//[http://ftp.blizzard.com/pub/starcraft/patches/Mac/StarCraft_v116_OSX.zip](http://ftp.blizzard.com/pub/starcraft/patches/Mac/StarCraft_v116_OSX.zip)
NSURL*url = [NSURLURLWithString:[@"http://ftp.blizzard.com/pub/starcraft/patches/Mac/StarCraft_v116_OSX.zip"stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSetURLQueryAllowedCharacterSet]]];
NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];
NSURLSession*session = [NSURLSessionsessionWithConfiguration: [NSURLSessionConfigurationdefaultSessionConfiguration]delegate:selfdelegateQueue:[NSOperationQueuemainQueue]];
NSURLSessionDataTask*dataTask = [sessiondataTaskWithRequest:request];
[dataTaskresume];
}
-(void)URLSession:(NSURLSession*)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveResponse:(nonnullNSURLResponse*)response completionHandler:(nonnullvoid(^)(NSURLSessionResponseDisposition))completionHandler
{
completionHandler(NSURLSessionResponseAllow);
}
-(void)URLSession:(NSURLSession*)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveData:(NSData*)data
{
[_resultDataappendData:data];
}
-(void)URLSession:(NSURLSession*)session task:(NSURLSessionTask*)task didCompleteWithError:(NSError*)error
{
if(error ==nil)
{
NSLog(@"%f",[_resultDatalength]/1024.0);
}
}

参考

你可能感兴趣的:(iOS 网络)