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-表示范围请求

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NSURLSession基本使用 简介 使用步骤使用NSURLSession会话对象创建Task,然后执行Task...
    彼岸的黑色曼陀罗阅读 4,601评论 0 3
  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 10,511评论 0 12
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,096评论 0 35
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 5,684评论 0 4
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,141评论 2 7