NSURLSession下载

//会话模式作用与NSURLConnection基本一致

//三种会话模式: default   ephemeral  background

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

//NSURLSession:会话

//创建会话

//三种创建方式

//1.[NSURLSession sharedSession]

//2.[NSURLSession sessionWithConfiguration:<#(nonnull NSURLSessionConfiguration *)#>]

//3.

//1.设置会话模式 1.3 delegateQueue :规定任务completionHandler的block块是在哪个线程执行,如果是nil,那么completionHandler在系统开辟的分线程中执行3

//1.2 delegate:可以为nil,数据是任务中的block块如果为self,要导入协议,数据在协议方法里

NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

//路径

NSURL*url = [NSURL URLWithString:@"http://localhost:8080/Login1/NewServlet?command=5"];

//创建任务(block的回调比代理有更高的优先级)如果设置了completionHandler,那么无论有没有实现代理,我们的响应数据都是从completionHandler返回,也就是说completionHandler有更高的优先级,如果completionHandler为nil则数据从代理方法中返回(需要导入3个协议)

//    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

//        NSLog(@"data ----> %@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);

//        NSLog(@"currentThread is ---->%@",[NSThread currentThread]);

//    }];

NSURLSessionDataTask *task = [session dataTaskWithURL:url];

//执行任务

[task resume];

}

#pragma mark -- NSURLSessionDelegate,NSURLSessionDataDelegate,NSURLSessionTaskDelegate

//接收到服务器响应时调用

- (void)URLSession:(NSURLSession *)session dataTask:(nonnullNSURLSessionDataTask *)dataTask didReceiveResponse:(nonnullNSURLResponse *)response completionHandler:(nonnullvoid(^)(NSURLSessionResponseDisposition))completionHandler {

NSLog(@"接收响应");

//接收到响应后需要设置继续执行的操作

//继续执行响应NSURLSessionResponseAllow 4

completionHandler(NSURLSessionResponseAllow);

}

//接收到服务器返回的数据时调用可能返回多次

- (void)URLSession:(NSURLSession *)session dataTask:(nonnullNSURLSessionDataTask *)dataTask didReceiveData:(nonnullNSData *)data {

NSLog(@"接收到数据");

NSLog(@"delegate data -----> %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

}

//响应完成时调用

- (void)URLSession:(NSURLSession *)session task:(nonnullNSURLSessionTask *)task didCompleteWithError:(nullableNSError *)error {

NSLog(@"响应完成");

//关闭会话

[session finishTasksAndInvalidate];

}

//关闭会话调用

- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error {

NSLog(@"关闭会话");

}

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

推荐阅读更多精彩内容

  • NSURLSession 使用步骤使用NSURLSession对象创建Task,然后执行Task -(void)g...
    BEYOND黄阅读 929评论 0 0
  • 最近呢由于自己工作需要封装一个使用NSURLSession上传下载的类,于是在封装完毕之后对NSURLSessio...
    Archer_bling阅读 970评论 3 5
  • NSURLSession概述1. NSURLSession session类型NSURLSession包括下面3种...
    瞎嘚嘚阅读 1,895评论 2 2
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,721评论 2 7
  • URLSession NSURLSession是iOS7中新的网络接口,与NSURLConnection是并列的。...
    JonesCxy阅读 1,606评论 0 9