NSURLSession 使用心得

NSURLSession - 网络任务工具类

简介 : 
iOS 7.0 出的,用于替代 NSURLConnection (iOS 9.0 被废弃)
为HTTP数据传输提供一系列接口
支持后台运行的网络任务
暂停/停止/重启网络任务,不再需要NSOperation封装


作用 :

直接使用系统方法可以实现文件上传和下载(Block回调)

通过代理方法可以获取文件上传和下载进度(Delegate监听)

代理方法还可实现下载任务的断点续传


注意事项和使用方法 :

为了方便使用,苹果提供了一个全局 session (单例)

所有的 任务(Task) 都是由 session 发起

所有的任务默认是挂起的,需要 resume

要设置 Session 代理,需要自定义 Session 不能使用单例 Session


结构图 : (便于理解,蒙圈也可跳过)

NSURLSession 使用心得


方法 :

实例化方法

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration  //参数1 - configuration : 配置

delegate:(nullable id <NSURLSessionDelegate>)delegate //参数2 - delegate : 设置代理

delegateQueue:(nullable NSOperationQueue *)queue; //参数3 - queue : 代理方法执行列队

启动任务方法

- (void)resume; //发起任务之后一定要用此方法开启任务

通过Request发起下载任务方法

- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;

- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request 

completionHandler:(void (^)(NSURL * _Nullable location, 

NSURLResponse * _Nullable response, 

NSError * _Nullable error))completionHandler;

通过URL发起下载任务方法

- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;

- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url 

completionHandler:(void (^)(NSURL * _Nullable location, 

NSURLResponse * _Nullable response, 

NSError * _Nullable error))completionHandler;

通过ResumeData发起下载任务

- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;

- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData 

 completionHandler:(void (^)(NSURL * _Nullable location, 

 NSURLResponse * _Nullable response, 

 NSError * _Nullable error))completionHandler;


NSURLSessionDownloadDelegate方法 :

下载过程中调用

- (void)URLSession:(NSURLSession *)session  //参数1 - session : 调用的下载任务

downloadTask:(NSURLSessionDownloadTask *)downloadTask //参数2 - downloadTask : 下载的任务信息

                          didWriteData:(int64_t)bytesWritten //参数3 - bytesWritten : 本次下载的字节

                   totalBytesWritten:(int64_t)totalBytesWritten //参数4 - totalBytesWritten : 已下载的总字节

    totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite; //参数5 - totalBytesExpectedToWrite : 预计要下载的总字节

下载完成后调用

- (void)URLSession:(NSURLSession *)session  //参数1 - session : 调用的下载任务

downloadTask:(NSURLSessionDownloadTask *)downloadTask //参数2 - downloadTask : 下载的任务信息

 didFinishDownloadingToURL:(NSURL *)location; //参数3 - location : 下载完成后的文件路径信息