NSURLSession 使用心得
NSURLSession - 网络任务工具类
作用 :
直接使用系统方法可以实现文件上传和下载(Block回调)
通过代理方法可以获取文件上传和下载进度(Delegate监听)
代理方法还可实现下载任务的断点续传
注意事项和使用方法 :
为了方便使用,苹果提供了一个全局 session (单例)
所有的 任务(Task) 都是由 session 发起
所有的任务默认是挂起的,需要 resume
要设置 Session 代理,需要自定义 Session 不能使用单例 Session
结构图 : (便于理解,蒙圈也可跳过)
方法 :
实例化方法
+ (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 : 下载完成后的文件路径信息