NSURLSession 三种方法

NSURLSession总结

NSURLSession 三种方法

 

 

No.1.>

 DataTask 加载数据:

 get!

 [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){

//可以打开服务器给你传的二进制数据

       NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]);

    }] resume];

 

 

No.2.>

 

 DownloadTask 下载数据 代理方法名<NSURLSessionDownloadDelegate>

//<需要看压缩文件的话,必须指定压缩文件路径到“文件夹”,这里是cache目录>

 

[[[NSURLSession sharedSession] downloadTaskWithURL:url 

completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

//location是解压路径~ 你要是想看到.tmp文件 要在NSlog打个短点,系统没执行完毕的时候.tmp文件是不会销毁的,就像下载了一个解压包,下载完毕之后,解压包就会自动销毁.

        NSLog(@"%@",location);

//解压缩--->Cache目录

NSString * cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;

 [SSZipArchive unzipFileAtPath:location.path toDestination:cacheDir];

 }] resume];

 

由于线程原因,无法更新下载进度条可以用以下2种修改。

//1.设置更新数据为主线程

dispatch_async(dispatch_get_main_queue{(), ^{

self.progressView.progress= progress;

}

//2.或者在session懒加载中设定为子线程执行

[[NSOperationQueue alloc] init]

 

 

No.3.>

 

UploadTaskWithRequest 上传数据(改,如果没有,就是新增)

             下载数据 代理方法名<NSURLSessionTaskDelegate>

跟post比  post后面跟的是个上传文件的脚本  它后面跟的事一个uploads/文件名

UploadTask是上传方法,需要更改request.HTTPMethod 说不定还要有身份验证 用

到KVC的方法给“Authorization”赋值 也就是写请求体

post上传有文件大小限制,默认2M  而UploadTask没有限制,随便上传

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"123.png" withExtension:nil];

 

    [[[NSURLSession sharedSession] uploadTaskWithRequest:request fromFile:fileURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

 

//打印一下上传路径和返回的response 是个字典 201创建 204修改 状态码老师给的有

 

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

 

    }] resume];

 

/// 上传和下载的代理方法要用到的话  代码变化不同///

//上传的代理方法只要实现

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend{

 

float progress = (float)totalBytesSent / totalBytesExpectedToSend;

 

NSLog(@"%f %@", progress, [NSThread currentThread]);

 

}

 

//下载的代理方法实现了3个之后 大的改动变为

 

暂停下载

 

[self.task cancelByProducingResumeData:^(NSData *resumeData) {

 

self.resumeData = resumeData;//纪录下载到哪了

 

 self.task = nil;//取消任务

 

}

 

继续下载

 

self.task = [self.session downloadTaskWithResumeData:self.resumeData];

 

self.resumeData = nil;//清空纪录

 

 [self.task resume];//开始任务

 

DELETE  404已经删除了       204文件存在 并且成功删除

 

在2.下载数据和3.上传数据中创建session都需要一个参数叫做:

config :// 设置网络的全局属性,一旦设置,所有的网络会话共享

          //在应用程序开发中,通常会建立一个单例,管理所有网络服务~

          //配置请求的 1>超时时间(还没有用到) 2>cookie(老师说是个小甜品,翻译确实是小甜品,甜点,但还没学到) 3>身份验证需要拼接一个用户名和密码给”Authorization” 

//通过这个方法,所有给服务器的附加信息,都可以通过字典设置(请求体)

config.HTTPAdditionalHeaders = @{@“Authorization”:@“用户名 密码”} 

config.HTTPMaximumConnectionsPerHost = 4;// 可以设置网络会话连接到一个主机的最大连接数。不要和线程的最大并发数搞混

不仅有这些  还有:

timeoutIntervalForRequest 超时市场

timeoutIntervalForResource整个资源请求时长

requestCachePolicy缓存策略

allowsCellularAccess允许蜂窝访问

//这里可以看到和request比起来config比它好太多了,因为request的请求题都是一堆字符串拼接起来的,而config有固定的属性可以设置。所以刀哥说以后统一都用session

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。