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的更多相关文章

  1. Linux网络编程(二)

    Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...

  2. C#网络编程二:Socket编程

    一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...

  3. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

  4. Linux 网络编程二(Socket创建)

    TCP通信 一个程序使用套接字需要执行4个步骤. --分配套接口和初始化 --连接 --发送或接收数据 --关闭套接字 涉及到的调用包括socket.bind.listen.connect(阻塞线程) ...

  5. IOS研究之网络编程(二)-Cocoa Streams使用具体解释

     本文以及相关的系列文章是我总结的iOS网络开发方面的知识点,本文是第二篇,主要分析了Cocoa Streams中的几个重要类 Cocoa Streams实际上是Objective-C对CFNet ...

  6. Linux网络编程二、tcp连接API

    一.服务端 1.创建套接字: int socket(int domain, int type, int protocol); domain:指定协议族,通常选用AF_INET. type:指定sock ...

  7. Java高并发网络编程(二)BIO

    一.阻塞 服务器端 public class BIOServer { public static void main(String[] args) throws Exception { ServerS ...

  8. Android应用开发-网络编程(二)(重制版)

    Apache HttpClient框架 GET方式请求提交数据 1. 创建一个HttpClient HttpClient hc = new DefaultHttpClient(); 2. 创建一个Ht ...

  9. python 多线程网络编程 ( 二 )

    背景 我在[第一篇文章中]已经介绍了如何实现一个多线程的todo应用,接下来我将会研究如何使这个服务器完成下面这几个功能. 1.使用正则表达式解析用户发送的请求数据: 2.使用ThreadLocal技 ...

  10. Java 网络编程(二)

    以下例开始本文的内容: 例1,需求:上传图片. 客户端: 服务端点. 读取客户端已有的图片数据. 通过socket输出流将数据发给服务端. 读取服务端反馈信息. 关闭. class PicClient ...

随机推荐

  1. sqlserver 2012 重启是 ID 自动增长 1000的问题

    1. Open "SQL Server Configuration Manager"2. Click "SQL Server Services" on the ...

  2. ASP.NET MVC 4应用程序文件夹

    App_Start It has configuration classes to reduce clutter code in the Global.asax 它包含了配置类来减少在Global.a ...

  3. 关于H5中的Canvas API的探索

    Canvas API 是H5中比较炫酷的一部分内容.可以通过它动态的生成和展示图形.图表.图像以及动画.下面我将学习一下Canvas API. 最后有书籍和源码. 一.概述: 1.基本元素: 在网页上 ...

  4. 修改Latex常用编辑器WinEdt中的字号与字体 [转]

    用latex编写科技文章已经是大多数科研工作者采用的方法,其编写效果是word所远不能及的.但是其效果只是在编译之后,之前文字那弱小的身躯确实令很多人无奈.10Pt的字体在以前14寸的电脑上看起来还是 ...

  5. Android Metro风格的Launcher开发系列第二篇

    前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客http://www.cnblogs.com/2010wuhao/p ...

  6. textLayout在快速输入清除时报错解决方法

    var tf:TextFlow; var len:int = tf.numChildren;for (var i:int = 0; i < len; i += 1){ tf.removeChil ...

  7. 【制作镜像Win*】特殊配置

    下载disk.config: wget http://10.254.3.75/images/configdrive/disk.config 修改libvirt.xml,更换cdrom为disk.con ...

  8. caffe源码阅读(1)-数据流Blob

    Blob是Caffe中层之间数据流通的单位,各个layer之间的数据通过Blob传递.在看Blob源码之前,先看一下CPU和GPU内存之间的数据同步类SyncedMemory:使用GPU运算时,数据要 ...

  9. OpenJudge 2737 大整数除法

    链接地址:http://bailian.openjudge.cn/practice/2737/ 题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 求2个大的正整数相除的商 输入 第 ...

  10. Apache(一)

    以下介绍是基于centos,Apache/2.2.15,进行解释 (资料来自www.netcraft.com) Apache 模块化的软件 Apache=core+module(内核+模块) core ...