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

时间: 2024-12-16 23:01:28

NSURLSession 三种方法的相关文章

分区自动挂载的三种方法

一.修改/etc/rc.local配置文件追加类似命令:mount /dev/sda1  /sda1 到配置文件最后一行 二,修改/etc/fstab配置文件追加类似命令:/dev/sda1   /sda1  ext4   defaults   0  0 到配置文件中 三,安装autofs服务yum install autofs 追加类似命令:sda1   -fstype=ext4  :/dev/sda1 到配置/etc/autofs.misc文件中重启服务: service autofs re

VMWARE虚拟机不能上网三种方法分析

bridged(桥接模式). NAT(网络地址转换模式) host-only(主机模式). 理论理解: 1.bridged(桥接模式) 在这处模式下,虚拟机等同于网络内的一台物理主机,可对手动设置IP,子网掩码,DNS,且IP地址要和主机的IP在同一网段内.这样,虚拟机就和主机如同连在一个HUB上的两台计算机,只要主机能上网,虚拟机也会在这种模式下上网. 2.host-only(主机模式) 在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的. 提示:在

pdf文件怎么编辑 如何编辑pdf文件的三种方法

pdf文件越来越流行,工作中经常遇到需要修改pdf文件的情况.一般人的电脑上都为pdf文件安装了一个pdf阅读器,可它只能用来阅读查看pdf文件,并不能满足人们的编辑需求.那么pdf文件怎么编辑?下面小编给大家讲讲关于如何编辑pdf文件的三种方法.     方法一:直接编辑,一步到位     如果要对pdf文件进行编辑,我们则需要安装pdf编辑器.最新版的迅捷pdf编辑器可以编辑pdf文件中的任何内容,包括文字.图片.页眉页脚.添加注释等等.迅捷pdf编辑器如何编辑pdf文件?     首先需要

Android TextView里直接显示图片的三种方法

方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般如果字体是在图片上重叠的推荐这样写.时间关系,这个不付源码了. 方法二:利用TextView支持部分Html的特性,直接用api赋图片.代码如下: //第一种方法在TextView中显示图片 String html = "<img src='" + R.drawable.circle + "'/>"; ImageGetter imgGett

Linux更新内核的三种方法

Centos内核升级的三种方法 在基于CentOS平台的工作过程中,难免有时需要升级或者降级内核以验证功能.调试性能或者更新整个系统.如果从头重新编译一个内核,由于现在内核特性越来越复杂,依赖的库或者工具也不少,加之重新编译耗时不菲,了解更新内核的多种方式就显得尤为必要.下面根据笔者最近的工作,总结了三种方法,供大家参考. 方法一 如果机器不能联网,可以下载现有内核包到本地机器,直接在本地更新 1.从http://ftp.scientificlinux.org/linux/scientific/

HashTable集合遍历的三种方法

hashtable集合遍历可以根据key,value以及key+value 示例代码: Hashtable table = new Hashtable(); Student stu = new Student(); stu.Name = "李四"; stu.Age = 18; Student stu1 = new Student(); stu1.Name = "张三"; stu1.Age = 18; Student stu2 = new Student(); stu

Oracle数据库备份与恢复的三种方法

转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去. 1. 简单导出数据(Export)和导入数据(Import) Oracle支持三种方式类型的

让一个元素垂直水平居中的三种方法

第一种方法: div.box{ weight:200px; height:400px; <!--把元素变成定位元素--> position:absolute; <!--设置元素的定位位置,距离上.左都为50%--> left:50%; top:50%; <!--设置元素的左外边距.上外边距为宽高的负1/2--> margin-left:-100px; margin-top:-200px; } *兼容性好;缺点:必须知道元素的宽高 ------------- 第二种方法:

url下载网页的三种方法

# -*- coding: utf-8 -*- import cookielib import urllib2 url = "http://www.baidu.com" print "第一种方法" response1 = urllib2.urlopen(url) print response1.getcode() print len(response1.read()) print "第二种方法" res = urllib2.Request(url