iOS网络-03-NSURLSession与NSURLSessionTask
简介
- NSURLSession也能完成网络请求
 - NSURLConnection在iOS9中不推荐使用,NSURLSession是iOS9中推荐使用的网络请求方式
 - NSURLSession需要与NSURLSessionTask配合使用
 - NSURLSession的简单使用步骤
- 创建请求任务
 - 执行请求任务
 
 - 通常使用NSURLSessionTask的子类来创建任务
 
NSURLSession
- NSURLSession对象的获取方法
获取全局的NSURLSession对象(
无法设置代理)+ (NSURLSession *)sharedSession
通过NSURLSessionConfiguration获取(
可以设置代理),NSURLSessionConfiguration类通常用来设置一些请求参数+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue
 
NSURLSessionTask
- 常用的属性
- taskIdentifier(NSUInteger, readonly),任务标识,唯一确定一个任务
 - originalRequest(NSURLRequest *, readonly),上一个请求对象
 - currentRequest(NSURLRequest *, readonly),当前请求对象
 - response(NSURLResponse *, readonly),服务器的响应数据
 - countOfBytesReceived(int64_t, readonly),已经接收到的数据量
 - countOfBytesExpectedToReceive(int64_t, readonly),所要接收到的总数据量
 - countOfBytesSent(int64_t, readonly),已经发送的数据量
 - countOfBytesExpectedToSend(int64_t, readonly),所要发送的总数据量
 - taskDescription(NSString *),任务描述
 - state(NSURLSessionTaskState, readonly),任务的状态
 - error(NSError *, readonly),错误信息
 - priority(float),任务的优先级
 
 - 常用的方法(任务的状态控制)
- - (void)cancel,取消任务
 - - (void)suspend,暂停任务
 - - (void)resume,继续任务
 
 - 任务优先级属性priority的取值
- NSURLSessionTaskPriorityDefault
 - NSURLSessionTaskPriorityLow
 - NSURLSessionTaskPriorityHigh
 
 - NSURLSessionTask
NSURLSessionDataTask,该子类没有扩充属性和方法,只是为了与NSURLSessionUploadTask和NSURLSessionDownloadTask区分
NSURLSessionUploadTask,用于上传任务
NSURLSessionDownloadTask,提供了一个取消任务的方法,但是会保存用于以后继续任务的信息,方法如下:
- (void)cancelByProducingResumeData:(void (^)(NSData * __nullable resumeData))completionHandler;
 
与NSURLSession相关的代理协议
- NSURLSessionDelegate
 - NSURLSessionTaskDelegate,遵守NSURLSessionDelegate协议
 - NSURLSessionDataDelegate,遵守NSURLSessionTaskDelegate协议,
是网络请求通常遵循的协议,常用的方法:接受到服务响应时调用的方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler;
/**
* 必须在该方法中对服务器的响应进行授权,才能继续接收服务器返回的数据,调用如下函数
* completionHandler(NSURLSessionResponseAllow)
*/
接收到服务器返回的数据时调用的方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
/**
* data:服务返回的数据,通常为JSON格式数据
*/
请求完成时调用的方法(成功或失败)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
/**
* 若出现错误,error中存放错误信息
*/
 - NSURLSessionDownloadDelegate(
通常用于下载大量数据),遵守NSURLSessionTaskDelegate协议,常用的方法:写入数据到临时文件时调用的方法(服务器返回一点就写入一点)
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
/**
* totalBytesWritten,已写入数据的总长度
* totalBytesExpectedToWrite:总共要写入数据的总长度
* 可以在该方法中计算下载进度
*/
遇到错误的时候调用
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
/**
*error:若遇到错误,则保存错误信息
*/
用于断点下载的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
/**
* fileOffset:继续下载时,文件的开始位置
* expectedTotalBytes:剩余的数据总数
*/
下载完成时调用的方法
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
/**
* location:下载的文件保存的临时位置
* 需要将下载的文件保存在可以长期保存的位置
*/
 
NSURLSession网络请求
- Block回调的方式
获取NSURLSession对象
NSURLSession *session =[NSURLSession sharedSession];
创建请求任务
NSURLSessionTask *task = [session downloadTaskWithURL:(此处为请求的URL路径) completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
//此处为请求任务完成后的回调Block,即:任务完成后会执行这里的代码
}];
启动任务
[task resume];
 - 代理的方式
获得NSURLSession对象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
创建请求任务
NSURLSessionTask *task = [session dataTaskWithRequest:(此处为NSURLRequest对象)];
启动任务
[task resume];
实现代理方法做进一步处理
 
iOS网络-03-NSURLSession与NSURLSessionTask的更多相关文章
- iOS网络2——NSURLSession使用详解
		
原文在此 一.整体介绍 NSURLSession在2013年随着iOS7的发布一起面世,苹果对它的定位是作为NSURLConnection的替代者,然后逐步将NSURLConnection退出历史舞台 ...
 - iOS 网络请求NSURLSession
		
iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...
 - iOS 编程:NSURLSession
		
定义:描述 Foundation 框架类在标准的网络传输协议下,用 URLs 连接因特网并与服务器交互的一整套体系. 支持的传输协议: File Transfer Protocol (ftp://) ...
 - iOS网络学习之“远离NSURLConnection 走进NSURLSession”
		
目前,在iOS的开发中,NURLConnection已经成为了过去式,现在的NSURLConnection已经deprected(iOS7之后),取而代之的是NSURLSession.而且AFNetw ...
 - IOS网络请求之NSURLSession使用
		
前言: 无论是Android还是ios都离不开与服务器交互,这就必须用到网络请求,记得在2013年做iOS的时候那时候用的ASIHTTPRequest框架,现在重新捡起iOS的时候ASIHTTPReq ...
 - iOS边练边学--NSURLSession、NSURLSessionTask的介绍与使用以及url中包含了中文的处理方法
		
一.NSURLSession.NSURLSessionTask的使用步骤 首先创建NSURLSession对象 通过NSURLSession对象创建对应的任务 <1>NSURLSessio ...
 - iOS 网络编程:AFNetworking
		
1 简介 1.1 概念 AFNetworking网络框架并不是IOS自带的框架,而是第三方的开源框架.它是对NSURLConnection和NSURLSession API的封装,但是目前AFNetw ...
 - iOS网络之数据请求GET和POST
		
1. HTTP和HTTPS协议 1> URL URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位 ...
 - iOS网络相关知识总结
		
iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...
 - 【转载】一步一步搭建自己的iOS网络请求库
		
一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...
 
随机推荐
- eclipse开发web应用程序步骤(图解)
			
*运行环境(也就是服务器的选择) 环境搭建好之后开始编写web程序!然后右键->Run as -> Run on Server!
 - 2014 网选 5011 Game(Nim游戏,数学题)
			
/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace ...
 - debian之samba服务器搭建
			
安装过程非常简单: apt-get install samba sudo vim /etc/sama/smb.conf [pengdl] comment = pengdl's samba path = ...
 - SQL Server里的INTERSECT
			
在今天的文章里,我想讨论下SQL Server里的INTERSECT设置操作.INTERSECT设置操作彼此交叉2个记录集,返回2个集里列值一样的记录.下图演示了这个概念. INTERSECT与INN ...
 - An Introduction to Garbage Collection(垃圾回收简介)
			
1. Introduction 2. Principles 3. Advantages 4. Disadvantages 5. 常见的垃圾回收技术 5.1. 跟踪式垃圾回收 5.1.1. 基本算法 5 ...
 - 查找最小的k 个元素之C#算法实现
			
紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 ...
 - Sprint第三个冲刺(第二天)
			
一.Sprint介绍 任务进度: 二.Sprint周期 看板: 燃尽图:
 - Winform开发框架主界面设计展示
			
做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...
 - Chrome弹窗的简单应用(选择结构与循环结构)
			
★选择结构★ ★JS实现弹窗显示随机数 示例代码效果图 ★ 弹窗实现对随机数的进一步判断 示例代码效果图 ★综合应用 比较大小 ★ 判断成绩等级 ): : : : : alert(" ...
 - 自己通过Cygwin编译的windows下的redis3.2.6
			
采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...