test

一、整体介绍

  • NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台。现在使用最广泛的第三方网络框架:AFNetworking、SDWebImage等等都使用了NSURLSession。作为iOS开发人员,应该紧随苹果的步伐,不断的学习,无论是软件的更新、系统的更新、API的更新,而不能墨守成规。

  • Session翻译为中文意思是会话,我们知道,在七层网络协议中有物理层->数据链路层->网络层->传输层->会话层->表示层->应用层,那我们可以将NSURLSession类理解为会话层,用于管理网络接口的创建、维护、删除等等工作,我们要做的工作也只是会话层之后的层即可,底层的工作NSURLSession已经帮我们封装好了。

  • 另外还有一些Session,比如AVAudioSession用于音视频访问,WCSession用于WatchOS通讯,它们都是建立一个会话,并管理会话,封装一些底层,方便我们使用。

二、使用的一般步骤

 

/// 加载网页
- (void)loadWebView {
    DeviceInfo *info = [DeviceInfo sharedDeviceInfo];
    // 无论是否被激活均加载网页信息,后台根据userid来判断显示的网页
    NSString *userid = ((info.userid != nil) ? info.userid : @"");
    NSString *urlStr = [NSString stringWithFormat:@"http://www.coohua.com/client/littleHelper/tpl/login.html?userid=%@&idfa=%@&version=%@",userid,info.idfa,info.version];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [self.view addSubview:self.webView];
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"GET"];
    [self.webView loadRequest:request];
}

 

 

/// 加载网页
- (void)loadWebView {
    DeviceInfo *info = [DeviceInfo sharedDeviceInfo];
    // 无论是否被激活均加载网页信息,后台根据userid来判断显示的网页
    NSString *userid = ((info.userid != nil) ? info.userid : @"");
    NSString *urlStr = [NSString stringWithFormat:@"http://www.coohua.com/client/littleHelper/tpl/login.html?userid=%@&idfa=%@&version=%@",userid,info.idfa,info.version];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [self.view addSubview:self.webView];
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"GET"];
    [self.webView loadRequest:request];
}

 

/// 加载网页
- (void)loadWebView {
    DeviceInfo *info = [DeviceInfo sharedDeviceInfo];
    // 无论是否被激活均加载网页信息,后台根据userid来判断显示的网页
    NSString *userid = ((info.userid != nil) ? info.userid : @"");
    NSString *urlStr = [NSString stringWithFormat:@"http://www.coohua.com/client/littleHelper/tpl/login.html?userid=%@&idfa=%@&version=%@",userid,info.idfa,info.version];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [self.view addSubview:self.webView];
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"GET"];
    [self.webView loadRequest:request];
}
/// 加载网页
- (void)loadWebView {
    DeviceInfo *info = [DeviceInfo sharedDeviceInfo];
    // 无论是否被激活均加载网页信息,后台根据userid来判断显示的网页
    NSString *userid = ((info.userid != nil) ? info.userid : @"");
    NSString *urlStr = [NSString stringWithFormat:@"http://www.coohua.com/client/littleHelper/tpl/login.html?userid=%@&idfa=%@&version=%@",userid,info.idfa,info.version];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [self.view addSubview:self.webView];
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"GET"];
    [self.webView loadRequest:request];
}

 

/// 加载网页
- (void)loadWebView {
    DeviceInfo *info = [DeviceInfo sharedDeviceInfo];
    // 无论是否被激活均加载网页信息,后台根据userid来判断显示的网页
    NSString *userid = ((info.userid != nil) ? info.userid : @"");
    NSString *urlStr = [NSString stringWithFormat:@"http://www.coohua.com/client/littleHelper/tpl/login.html?userid=%@&idfa=%@&version=%@",userid,info.idfa,info.version];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [self.view addSubview:self.webView];
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setHTTPMethod:@"GET"];
    [self.webView loadRequest:request];
}

 

其核心就是对网络任务进行封装,实现多线程,比如将一个网络请求交给NSURLSession,最后NSURLSession将访问结果通过block回调返回,期间自动实现多线程,而且可以通过代理实现监听(是否成功,当前的进度等等); 大致分为3个步骤:

NSURL:请求地址,定义一个网络资源路径:

NSURL *url = [NSURL URLWithString:@"协议://主机地址/路径?参数&参数"];

解释如下: 

  • 协议:不同的协议,代表着不同的资源查找方式、资源传输方式,比如常用的http,ftp等
  • 主机地址:存放资源的主机的IP地址(域名)
  • 路径:资源在主机中的具体位置
  • 参数:参数可有可无,也可以多个。如果带参数的话,用“?”号后面接参数,多个参数的话之间用&隔开

NSURLRequest:请求,根据前面的NSURL建立一个请求:

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];

参数解释如下: 

  • url:资源路径
  • cachePolicy:缓存策略(无论使用哪种缓存策略,都会在本地缓存数据),类型为美剧类型,取值如下:
    • NSURLRequestUseProtocolCachePolicy = 0 //默认的缓存策略,使用协议的缓存策略
    • NSURLRequestReloadIgnoringLocalCacheData = 1 //每次都从网络加载
    • NSURLRequestReturnCacheDataElseLoad = 2 //返回缓存否则加载,很少使用
    • NSURLRequestReturnCacheDataDontLoad = 3 //只返回缓存,没有也不加载,很少使用
  • timeoutInterval:超时时长,默认60s,建议15-30s

另外,还可以设置其它一些信息,比如请求头,请求体等等,如下:

注意,下面的request应为NSMutableURLRequest,即可变类型

// 告诉服务器数据为json类型
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
// 设置请求体(json类型)
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"userid":@"123456"} options:NSJSONWritingPrettyPrinted error:nil];
request.HTTPBody = jsonData; 

NSURLSession:创建NSURLSession发送请求

为了方便使用,苹果提供了一个全局的NSURLSession单例,如同NSURLConnection一样。这样做的缺陷就是不能监控,如果想要监控每一个请求,则必须通过代理来监听,我们知道单例是一对多的,而代理是一对一,因此必须自己实例化单独的Session对象(NSURLConnection则很难),来实现单独监控。
4)由 session 发起任务 NSURLSessionTask的三个子类: dataTask uploadTask downloadTask
5)每一个任务默认都是挂起的,需要调用 resume 方法

你可能感兴趣的:(test)