OC NSURLSession网络请求

(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方法

注: 这种方式,可以用于下载内容大的数据,电影视频等,配合NSFileHandleNSFileManager使用


一行代码实现断点传输

[mutiRequest setValue:@"bytes=currentLength-" forHTTPHeadrField:@"Range"];

currentLength 文件已下载长度

原理: 请求报文头部加入Range:bytes=currentLength-表示范围请求

你可能感兴趣的:(OC NSURLSession网络请求)