//會(huì)話模式作用與NSURLConnection基本一致
//三種會(huì)話模式: default ??ephemeral ?background
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
//NSURLSession:會(huì)話
//創(chuàng)建會(huì)話
//三種創(chuàng)建方式
//1.[NSURLSession sharedSession]
//2.[NSURLSession sessionWithConfiguration:<#(nonnull NSURLSessionConfiguration *)#>]
//3.
//1.設(shè)置會(huì)話模式 1.3 delegateQueue :規(guī)定任務(wù)completionHandler的block塊是在哪個(gè)線程執(zhí)行檬某,如果是nil,那么completionHandler在系統(tǒng)開辟的分線程中執(zhí)行3
//1.2 delegate:可以為nil,數(shù)據(jù)是任務(wù)中的block塊如果為self,要導(dǎo)入?yún)f(xié)議,數(shù)據(jù)在協(xié)議方法里
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
//路徑
NSURL*url = [NSURL URLWithString:@"http://localhost:8080/Login1/NewServlet?command=5"];
//創(chuàng)建任務(wù)(block的回調(diào)比代理有更高的優(yōu)先級(jí))如果設(shè)置了completionHandler,那么無(wú)論有沒有實(shí)現(xiàn)代理,我們的響應(yīng)數(shù)據(jù)都是從completionHandler返回,也就是說(shuō)completionHandler有更高的優(yōu)先級(jí)暂论,如果completionHandler為nil則數(shù)據(jù)從代理方法中返回(需要導(dǎo)入3個(gè)協(xié)議)
// ???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];
//執(zhí)行任務(wù)
[task resume];
}
#pragma mark -- NSURLSessionDelegate,NSURLSessionDataDelegate,NSURLSessionTaskDelegate
//接收到服務(wù)器響應(yīng)時(shí)調(diào)用
- (void)URLSession:(NSURLSession *)session dataTask:(nonnullNSURLSessionDataTask *)dataTask didReceiveResponse:(nonnullNSURLResponse *)response completionHandler:(nonnullvoid(^)(NSURLSessionResponseDisposition))completionHandler {
NSLog(@"接收響應(yīng)");
//接收到響應(yīng)后需要設(shè)置繼續(xù)執(zhí)行的操作
//繼續(xù)執(zhí)行響應(yīng)NSURLSessionResponseAllow 4
completionHandler(NSURLSessionResponseAllow);
}
//接收到服務(wù)器返回的數(shù)據(jù)時(shí)調(diào)用可能返回多次
- (void)URLSession:(NSURLSession *)session dataTask:(nonnullNSURLSessionDataTask *)dataTask didReceiveData:(nonnullNSData *)data {
NSLog(@"接收到數(shù)據(jù)");
NSLog(@"delegate data -----> %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
//響應(yīng)完成時(shí)調(diào)用
- (void)URLSession:(NSURLSession *)session task:(nonnullNSURLSessionTask *)task didCompleteWithError:(nullableNSError *)error {
NSLog(@"響應(yīng)完成");
//關(guān)閉會(huì)話
[session finishTasksAndInvalidate];
}
//關(guān)閉會(huì)話調(diào)用
- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error {
NSLog(@"關(guān)閉會(huì)話");
}