ios NSURLSession简介

iOS7 中我们可以使用NSURLSession类来进行URL请求。如果是更早之前的版本使用NSURLConnection,在此之前先看下ios中关于URL的一些相关类。

URLLoading部分是我们主要使用的类,其它五个是帮助类。涉及各个方面。协议支持,加密,cookie管理,缓存,配置。

NSURLSession中的任务的行为依赖于三件事:session的类型(由传入的configuration对象来决定),task的类型,当task创建时应用是否处于前台。

Session的类型

1. 默认session使用diskcache并将证书保存在用户keychain中。

2. 短暂session没有将任何数据存在disk上,所有相关的东西都在ram中,当session无效时,这些内容自动被清除。

3.后台session,和默认session类似,除了独立一个进程来处理所有的数据传送。还有些限制。


Task的类型

在一个session中,NSURLSession支持三种任务类型:data tasks, download tasks, upload tasks

data task: 使用NSData来发送和接收数据,适用于频繁的,数据量很小的交互。可以在数据到达时将数据发送给应用,或是在数据接收完成时,回调。

download task:以文件的形式接收数据。并且当app没有运行时,支持后台下载。

upload task:发送数据(通常以文件的形式)。并且当app没有运行时,支持后台上传。


创建并配置一个session

NSURLSession提供了很多的配置选项:

指明存储cache, cookies, credentials的位置

auth,和一个特殊的request(task)关联,或是一组的request(session)

文件的上传和下载,从metadata 中分离。

每个host的最大连接数。

每个resource的超时时间,

最小和最大的TLS版本支持

自定义proxy 字典

控制cookie 策略

控制http pipelining行为

因为大部分设置都包含在独立的配置对象中,你可以重新使用配置。当你实例化一个session object时,你指明了:

一个配置对象来管理session和task的行为。

可选的,一个委托对象来处理incoming data 当接收到数据时并处理session和task的其它事件。例如服务端鉴权,决定i一个resource load是否被转化成download,等等。

如果你没有提供一个委托,NSURLSession使用系统提供的。在这种情况下,你可以欣然的使用NSURLSession的 sendAsynchronousRequest:queue:completionHandler: 方法。

注意:如果你的app需要执行后台传输,就必须提供一个自定义的委托。

在你实例化seesion对象后,你不能改变配置或者委托在没有创建新的session情况下。

下面来看下如何创建normal, ephemeral和background sessions.

self.completionHandlerDictionary = [NSMutableDictionary dictionaryWithCapacity:0];

NSURLSessionConfiguration *backgroundConfigObject = [NSURLSessionConfiguration backgroundSessionConfiguration: @"myBackgroundSessionIdentifier"];

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSessionConfiguration *ephemeralConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration];

NSURLCache *myCache = [[NSURLCache alloc] initWithMemoryCapacity: 16384 diskCapacity: 268435456 diskPath: cachePath];

defaultConfigObject.URLCache = myCache;

defaultConfigObject.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;

self.defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];

self.backgroundSession = [NSURLSession sessionWithConfiguration: backgroundConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];

self.ephemeralSession = [NSURLSession sessionWithConfiguration: ephemeralConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];

除了background configuration,可以重新使用session configuraion对象来创建其它的session.

因为它是深拷贝的。




时间: 2024-08-23 23:51:31

ios NSURLSession简介的相关文章

【IOS 开发】IOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

一. IOS 项目简介 1. IOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类和资源; (1) HelloWorld 目录 HelloWorld 目录介绍 : -- 命名规则 : 该目录名称与 IOS 项目名称相同, 是主目录; -- 存放内容 : IOS 项目的 源码文件, 界面设计文件, 资源文件都存放在该目录下; -- 源文件 : Objective C 的 .m 和

IOS 网络浅析-(八 NSURLSession简介)

就在不长也不短的时间前,苹果正式命令咱们要向NSURLSession看,因此我们不得不认认真真的听从老大的教导,努力认知NSURLSession.其实呢,三方早已为我们解决了问题,但是呢,我们还是有必要大概了解一下NSURLSession.下面呢,我就为大家简单介绍NSURLSession. *下面是一位大牛写过的一段话,在此献上* NSURLConnection在开发中会使用的越来越少,iOS9已经将NSURLConnection废弃,现在最低版本一般适配iOS,所以也可以使用.NSURLCo

【转】GitHub 排名前 100 的安卓、iOS项目简介

GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库. 项目名称 项目简介 1. react-native 这 个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 Re

ios NSURLSession使用说明及后台工作流程分析

转自:http://www.maxiaoguo.com/clothes/268.html NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意,如果用户强制将程序关闭,NSURLSession会断掉. NSURLSession提供的功能: 1.通过URL将数据下载到内存 2.通过URL将数据下载到文件系统 3.将数据上传到指定URL 4.在后台完成上述

ios NSURLSession(iOS7后,取代NSURLConnection)使用说明及后台工作流程分析

NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意,如果用户强制将程序关闭,NSURLSession会断掉. NSURLSession提供的功能: 1.通过URL将数据下载到内存 2.通过URL将数据下载到文件系统 3.将数据上传到指定URL 4.在后台完成上述功能   工作流程 如果我们需要利用NSURLSession进行数据传输我们需要: 1.创

2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)

排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库. 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 React Native, 该框架结合了 Web 应用和 Native 应用的

GitHub 排名前 100 的安卓、iOS项目简介

GitHub Android Libraries Top 100 简介 转自:http://www.devstore.cn/essay/essayInfo/6485.html 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库. 项目名称 项目简介 1. react-native 这个是 Faceboo

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

*  会话NSURLSession NSURLConnection通过全局状态来管理cookies, 认证信息等公共资源, 如果两个连接需要使用不同的资源配置情况时就无法解决, 这个问题在NSURLSession可以解决, NSURLSession同时对应着多个连接, 会话通过工厂方法来创建, 同一个会话中使用相同的状态信息, NSURLSession支持进程三种会话: 1. defaultSessionConfiguration : 进程内会话 (默认会话), 用来硬盘来缓存数据. 2. ep

IOS Quartz2D简介

Quartz2D 简介( 后续会有相关应用) 第一部分 绘制直线 代码示例: - (void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef cxContext = UIGraphicsGetCurrentContext(); //开始画图 //设置直线起点 CGContextMoveToPoint(cxContext, 0, 20); //设置直线中点 CGContextAddLineToPoint(cxContext, 100, 20); //渲染