IOS-网络(NSURLSession)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS-网络(NSURLSession)相关的知识,希望对你有一定的参考价值。

 

  1 //
  2 //  ViewController.m
  3 //  NSURLSession
  4 //
  5 //  Created by ma c on 16/2/1.
  6 //  Copyright © 2016年 博文科技. All rights reserved.
  7 //
  8 
  9 #import "ViewController.h"
 10 
 11 @interface ViewController ()<NSURLSessionDownloadDelegate>
 12 
 13 @end
 14 
 15 @implementation ViewController
 16 /*
 17  任务:任何请求都是一个任务
 18  
 19  NSURLSessionDataTask:普通的GET、POST请求
 20  NSURLSessionDownloadTask:文件下载
 21  NSURLSessionUploadTask:文件上传
 22  
 23  注意:如果给下载任务设置了completionHandler这个block,也实现了下载代理方法,优先执行block
 24 
 25  */
 26 - (void)viewDidLoad {
 27     [super viewDidLoad];
 28     
 29     self.view.backgroundColor = [UIColor cyanColor];
 30 
 31 }
 32 
 33 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
 34 {
 35 //    [self sendGetRequest];
 36 //    [self sendPostRequest];
 37 //    [self downlaodTask1];
 38     [self downlaodTask2];
 39 }
 40 
 41 #pragma mark - NSURLSessionDownloadTask2
 42 ///下载任务(有下载进度)
 43 - (void)downlaodTask2
 44 {
 45     //1.创建Session对象
 46     NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration];
 47     NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg delegate:self delegateQueue:[NSOperationQueue mainQueue]];
 48     //2.创建一个任务
 49     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos/minion_02.mp4"];
 50     NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url];
 51     //3.开始任务
 52     [task resume];
 53 }
 54 
 55 #pragma mark - NSURLSessionDownloadDelegate的代理方法
 56 ///下载完毕时调用
 57 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
 58 {
 59     NSLog(@"didFinishDownloadingToURL--->%@",location);
 60     //location:文件的临时路径,下载好的文件
 61     NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, nil) lastObject];
 62     NSString *file = [caches stringByAppendingPathComponent:downloadTask.response.suggestedFilename];
 63     
 64     //降临时文件夹,剪切或者复制到Caches文件夹
 65     NSFileManager *mgr = [NSFileManager defaultManager];
 66     [mgr moveItemAtPath:location.path toPath:file error:nil];
 67 }
 68 ///恢复下载时调用
 69 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
 70 {
 71     
 72 }
 73 ///每当写完一部分就调用(根据文件大小调用多次)
 74 //bytesWritten:             这次调用写了多少
 75 //totalBytesWritten:        累计写了多少长度到沙河中
 76 //totalBytesExpectedToWrite:文件的总长度
 77 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
 78 {
 79     double progress = (double)totalBytesWritten / totalBytesExpectedToWrite;
 80     
 81     NSLog(@"下载进度--->%lf",progress);
 82     
 83 }
 84 
 85 #pragma mark - NSURLSessionDownloadTask1
 86 ///下载任务(不能看到下载进度)
 87 - (void)downlaodTask1
 88 {
 89     //1.创建Session对象
 90     NSURLSession *session = [NSURLSession sharedSession];
 91     //2.创建NSURL
 92     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos/minion_02.mp4"];
 93     NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
 94        //location:文件的临时路径,下载好的文件
 95         NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, nil) lastObject];
 96         NSString *file = [caches stringByAppendingPathComponent:response.suggestedFilename];
 97         
 98         //降临时文件夹,剪切或者复制到Caches文件夹
 99         NSFileManager *mgr = [NSFileManager defaultManager];
100         [mgr moveItemAtPath:location.path toPath:file error:nil];
101         
102         //[mgr copyItemAtPath:location.path toPath:file error:nil];
103         
104         
105     }];
106     //3.开始任务
107     [task resume];
108 }
109 
110 
111 #pragma mark - NSURLSessionDataTask
112 ///POST请求
113 - (void)sendPostRequest
114 {
115     //1.创建Session对象
116     NSURLSession *session = [NSURLSession sharedSession];
117     
118     //2.创建NSURL
119     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"];
120     //3.创建请求
121     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
122     request.HTTPMethod = @"POST";
123     //4.设置请求体
124     request.HTTPBody = [@"username=123&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
125     //5.创建一个任务
126     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
127         
128         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
129                                                              options:NSJSONReadingMutableLeaves error:nil];
130         NSLog(@"sendPostRequest:%@",dict);
131     }];
132     //6.开始任务
133     [task resume];
134 }
135 
136 ///GET请求
137 - (void)sendGetRequest
138 {
139     //1.得到session对象
140     NSURLSession *session = [NSURLSession sharedSession];
141     //2.创建一个任务
142     NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/video"];
143     NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
144         
145         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
146                                                              options:NSJSONReadingMutableLeaves error:nil];
147         NSLog(@"sendGetRequest:%@",dict);
148     }];
149     //3.开始任务
150     [task resume];
151 }
152 @end

 

以上是关于IOS-网络(NSURLSession)的主要内容,如果未能解决你的问题,请参考以下文章

iOS网络2——NSURLSession

IOS-网络(NSURLSession)

iOS学习笔记13-网络NSURLSession

IOS 网络浅析-(八 NSURLSession简介)

iOS开发之网络编程--1NSURLSession的基本使用

iOS开发之网络编程--1NSURLSession的基本使用