美文网首页
NSURLSessionConfiguration的简单实用

NSURLSessionConfiguration的简单实用

作者: kikido | 来源:发表于2016-06-11 21:18 被阅读1655次

    构建URL

    NSURL *url = [NSURL URLWithString:@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3"];
    

    构建NSURLSeesionConfiguration

    /*
         defaultSessionConfiguration;       默认会话类型,能够进行磁盘缓存
         ephemeralSessionConfiguration;     临时会话类型,不进行任何的磁盘缓存
         backgroundSessionConfigurationWithIdentifier:(NSString *)identifier 后台类型,用于后台下载上传
         */
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        
        //设置配置文件
        //设置缓存策略
        //config.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
        //设置网络服务类型 决定了网络请求的形式
        config.networkServiceType = NSURLNetworkServiceTypeDefault;
        //设置请求超时时间
        config.timeoutIntervalForRequest = 15;
        //设置请求头
        //config.HTTPAdditionalHeaders
        //网络属性  是否使用移动流量
        config.allowsCellularAccess = YES;
        
    

    创建会话对象

    //delegateQueue 网络请求都是在后台进行,但是当网络请求完成后,可能会需要回到主线程进行刷新界面操作。所以此时可以设置代理回调方法所执行的队列。
        //NSURLSessionDataDelegate -> NSURLSessionTaskDelegate -> NSURLSessionDelegate
        NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    

    创建网络任务

    NSURLSessionDataTask *task = [session dataTaskWithURL:url];
        [task resume];
    
    

    记得添加代理 <NSURLSessionDataDelegate>

    已经接收到响应头

    - (void)URLSession:(NSURLSession *)session
              dataTask:(NSURLSessionDataTask *)dataTask
    didReceiveResponse:(NSURLResponse *)response
     completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
        
        //通过状态码来判断石是否成功
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        if (httpResponse.statusCode == 200) {
            NSLog(@"请求成功");
            
            NSLog(@"%@", httpResponse.allHeaderFields);
            
            //初始化接受数据的NSData变量
            _data = [[NSMutableData alloc] init];
            
            //执行Block回调 来继续接收响应体数据
            //执行completionHandler 用于使网络连接继续接受数据
            /*
             NSURLSessionResponseCancel 取消接受
             NSURLSessionResponseAllow  继续接受
             NSURLSessionResponseBecomeDownload 将当前任务 转化为一个下载任务
             NSURLSessionResponseBecomeStream   将当前任务 转化为流任务
             */
            completionHandler(NSURLSessionResponseAllow);
            
        } else {
            NSLog(@"请求失败");
        }
        
    }
    
    

    接收到数据包时调用的代理方法

    - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    //    NSLog(@"收到了一个数据包");
        
        //拼接完整数据
        [_data appendData:data];
        NSLog(@"接受到了%li字节的数据", data.length);
    }
    

    数据接收完毕时调用的代理方法

    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
        NSLog(@"数据接收完成");
        
        if (error) {
            NSLog(@"数据接收出错!");
            //清空出错的数据
            _data = nil;
        } else {
            //数据传输成功无误,JSON解析数据
    //        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableLeaves error:nil];
    //        NSLog(@"%@", dic);
        }
    }
    

    相关文章

      网友评论

          本文标题:NSURLSessionConfiguration的简单实用

          本文链接:https://www.haomeiwen.com/subject/gtledttx.html