标签:
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
标签:
原文地址:http://www.cnblogs.com/damifan/p/4433748.html