网络编程(二)NSURLSessionConfiguration
1.NSURLSession有三种工作模式
(1)defaultSessionConfiguration(默认):使用的是基于磁盘缓存的持久化策略,Cache,Cookie。
(2)ephemeralSessionConfiguration(短暂):该模式不使用磁盘保存任何数据。所有和会话相关的caches,证书,cookies等都被保存在RAM中,因此当程序使会话无效,这些缓存的数据就会被自动清空。
(3)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier(后台):在后台完成上传和下载,在创建Configuration对象的时候需要提供一个NSString类型的标识。
我们可以设置NSURLSessionConfiguration的相关属性来对NSURLSession进行配置,如果不对NSURLSession进行配置,采用默认的工作模式。
下面上代码:
- (void)configSession
{
//1.构造URL
NSURL *url = [NSURL URLWithString:@"http://news-at.zhihu.com/api/3/news/latest"];
//2.配置NSURLSessionConfiguration
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
//允许使用蜂窝网络
config.allowsCellularAccess = YES;
//设置超时时间(秒)
config.timeoutIntervalForRequest = 10; //3.创建session对象时使用config进行配置
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
//4.创建网络任务
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url];
//5.发送网络请求
[dataTask resume]; }
发送网络请求后要在代理里面进行相关操作
这里代理遵守的协议有很多种可以选择,根据网络任务(Task)的不同遵守不同的协议,本例遵守<NSURLSessionDataDelegate>协议
#pragma mark - NSURLSessionDataDelegate //监听网络传输完成的事件
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(nullable NSError *)error { NSLog(@"网络传输完成"); } //收到了响应包中的状态码以及响应头数据,只会被调用一次
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; NSLog(@"响应状态码:%ld", httpResponse.statusCode); //NSURLSessionResponseAllow:继续传输响应体数据
//NSURLSessionResponseCancel:取消当前传输,相当于task cancel
completionHandler(NSURLSessionResponseAllow); } //收到响应体的数据--此方法可能会被调用多次
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { //如果要获取到完整的数据要创建一个全局的NSMutableData对每次接收到的data进行拼接
NSLog(@"每次接收到数据包的长度:%li", data.length); }
网络编程(二)NSURLSessionConfiguration的更多相关文章
- Linux网络编程(二)
Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...
- C#网络编程二:Socket编程
一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...
- Java网络编程二:Socket详解
Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...
- Linux 网络编程二(Socket创建)
TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...
- IOS研究之网络编程(二)-Cocoa Streams使用具体解释
本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类 Cocoa Streams实际上是Objective-C对CFNet ...
- Linux网络编程二、tcp连接API
一.服务端 1.创建套接字: int socket(int domain, int type, int protocol); domain:指定协议族,通常选用AF_INET. type:指定sock ...
- Java高并发网络编程(二)BIO
一.阻塞 服务器端 public class BIOServer { public static void main(String[] args) throws Exception { ServerS ...
- Android应用开发-网络编程(二)(重制版)
Apache HttpClient框架 GET方式请求提交数据 1. 创建一个HttpClient HttpClient hc = new DefaultHttpClient(); 2. 创建一个Ht ...
- python 多线程网络编程 ( 二 )
背景 我在[第一篇文章中]已经介绍了如何实现一个多线程的todo应用,接下来我将会研究如何使这个服务器完成下面这几个功能. 1.使用正则表达式解析用户发送的请求数据: 2.使用ThreadLocal技 ...
- Java 网络编程(二)
以下例开始本文的内容: 例1,需求:上传图片. 客户端: 服务端点. 读取客户端已有的图片数据. 通过socket输出流将数据发给服务端. 读取服务端反馈信息. 关闭. class PicClient ...
随机推荐
- Ajax学习笔记(1)
Ajax全称为Asynchronous Javascript and XML.一般用于页面数据交互响应,最大的好处是响应时无需刷新页面. Ajax的优点: 1.不需要插件的支持.用户只需允许javas ...
- SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库
SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库 /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...
- 页面javascript 和jquery 的一些用法
confirm:提交之前的提示验证 if(confirm("确认是否提交?")){ alert("确认提交..."); } input按钮的禁用: $(&quo ...
- c# json转Dictionary字典
JavaScriptSerializer s = new JavaScriptSerializer(); string jsonTexts = "{\"count\" ...
- Java编写的文本编辑器(菜鸟作品)
//这是主窗体文件 Wordwin.java import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.sw ...
- JobControl管理多job依赖完整示例
处理 复杂的要求的时候,有时一个mapreduce程序是完成不了的,往往需要多个mapreduce程序,这个时候就要牵扯到各个任务之间的依赖关系,所谓 依赖就是一个MR Job 的处理结果是另外的MR ...
- 经历:easyui的layout自适应高度布局
在使用easyui的layout布局的时候,在某种情况下,我们会在后续的逻辑中修改一下layout的某个region的高度,那么该怎么做呢? 我就遇到了这样的情况,今天需求经理提出了一个需求:认证用 ...
- html-----020----事件
html事件 <body> <a href="http://www.cctv.com" accesskey="k" target=" ...
- extern int a[] VS extern int *a
array VS pointer 参考: 1.Extern using pointer instead of array array is not pointer 2.extern array que ...
- C++重写与重载、重定义
文章引用自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/ 重载overload:是函数名 ...