(1)通过Block回调的API
- 单例
NSURLSessionTask *task = [[NSURLSession sharedSession]dataTaskWithURL:[NSURL URLWithString:@"urlStr"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//回调
}];
[task resume];
NSURLSessionTask *task = [[NSURLSession sharedSession]dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"urlStr"]] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//回调
}];
[task resume];
注: 通过block回调的方法只适合用于数据小的请求,例如图片
(2)通过代理协议
- session对象
1. 建立网络请求
- (void)creatNewSessionTask {
-
NSURL *url = [NSURL URLWithString:urlStr];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//参数1:可以通过`NSURLSessionConfiguration`进行玩过请求配置
//参数2:代理关联
//参数3:线程相关????
NSURLSessionTask *newTask = [session dataTaskWithRequest:[NSURLRequest requestWithURL:url]];
//创建SessionTask
}
2. 协议代理方法:
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
//请求响应的回调
//completionHandler(NSURLSessionResponseDisposition)之后执行的动作
//继续
completionHandler(NSURLSessionResponseAllow);
//取消
completionHandler(NSURLSessionResponseCancel);
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
//请求结果返回的数据
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
//数据接收完成或者失败
}
3. 暂停与继续
[_task suspend];//挂起-暂停
[_task resume];//继续
sessionTask创建就是suspend状态,所以创建task后要调用resume
方法
注: 这种方式,可以用于下载内容大的数据,电影视频等,配合NSFileHandle
和NSFileManager
使用
一行代码实现断点传输
[mutiRequest setValue:@"bytes=currentLength-" forHTTPHeadrField:@"Range"];
currentLength
文件已下载长度
原理: 请求报文头部加入Range:bytes=currentLength-
表示范围请求