NSURLConnection和NSURLSession之间最大的区别是什么?

27

NSURLSession 是苹果公司推出的新网络软件开发包(SDK),相较于NSURLConnection更加先进,而第三种选择是CFNetwork。

问题在于找出它们之间最大的区别,以便理解为什么苹果公司在这方面不断进行改进。

谢谢!


NSURLConnection:此API被视为遗留。请改用URLSession。 URLSession - Ben Butterworth
3个回答

40

整个模型是不同的。NSURLSession是基于这样一种假设设计的:您将有许多需要相似配置(标准头文件集等)的请求,并且如果您这样做,它会使生活变得更加容易。

NSURLSession还支持后台下载,这使得在您的应用程序未运行(或在iOS上处于后台运行)时继续下载资源成为可能。对于某些用例,这也是一个重要的优点。

NSURLSession还提供了相关请求的分组,使得取消与特定工作单元相关的所有请求变得容易,例如,在用户关闭窗口或选项卡时取消加载网页时关联的所有加载。

NSURLSession还提供了更好的接口来使用块请求数据,因为它允许您将它们与代理方法结合使用,以进行自定义身份验证处理、重定向处理等等,而在NSURLConnection中,如果您突然意识到需要执行这些操作,您必须重构您的代码以不使用基于块的回调。


15

NSURLConnection

NSURLConnection是Foundation URL Loading System中的一组相互关联的组件,包括NSURLRequest、NSURLResponse、NSURLProtocol、NSURLCache、NSHTTPCookieStorage、NSURLCredentialStorage以及其中一个名为NSURLConnection。

NSURLRequest对象被传递给一个NSURLConnection对象。该委托(符合早期非正式和协议)异步响应作为NSURLResponse的NSData以及从服务器发送的任何相关数据。

在向服务器发送请求之前,会查询共享缓存,并根据策略和可用性立即和透明地返回缓存响应。如果没有可用的缓存响应,请求将被发出并具有缓存其响应以供任何后续请求使用的选项。在与服务器协商请求的过程中,服务器可能会发出身份验证挑战,这可以通过共享cookie或凭证存储自动处理,也可以由连接委托处理。去往的请求还可以被已注册的NSURLProtocol对象拦截,以根据需要无缝更改加载行为。

NSURLSession

NSURLSession是指一组相互依赖的类,除了同名的NSURLSession类外,还包括NSURLSessionConfiguration和三个NSURLSessionTask的子类:NSURLSessionDataTask、NSURLSessionUploadTask和NSURLSessionDownloadTask。

NSURLSessionTask是一个抽象子类,有三个直接使用的具体子类:NSURLSessionDataTask、NSURLSessionUploadTask和NSURLSessionDownloadTask。这三个类封装了现代应用程序的三种基本网络任务:获取数据,如JSON或XML,以及上传和下载文件。详情请参见more


12

NSURLSession和NSURLConnection的区别

NSURLSession:

注:(NSURLConneciton在OS X 10.11和iOS 9.0中已被弃用)

1) NSURLSession假设需要类似配置(标准的headers等)的许多请求,从而简化了生活。

2) NSURLSession还支持后台下载,使得在iOS上应用程序不运行或处于后台时继续下载资源成为可能。

3) NSURLSession还提供相关请求的分组,使得易于取消与特定工作单元相关的所有请求,例如在用户关闭窗口或选项卡时取消加载网页所关联的所有请求。

4) NSURLSession还提供了更好的接口,使用块请求数据,并允许将它们与委托方法结合起来执行自定义身份验证处理,重定向处理等操作。

NSURLSessionConfiguration类型

1) defaultSessionConfiguration

创建一个默认配置对象,该对象使用磁盘持久化全局缓存,凭据和cookie存储对象。

2) ephemeralSessionConfiguration

与默认配置类似,除了所有与会话相关的数据都存储在内存中。将其视为“私有”会话。

3) backgroundSessionConfiguration

允许会话在后台执行上传或下载任务。即使应用程序本身被暂停或终止,传输也可以继续进行。

NSURLSessionTasks类型

1) Data tasks (NSURLSessionDataTask)

数据任务用于从服务器请求数据,例如JSON数据。这些数据通常存储在内存中,不会触及文件系统,我们可以使用NSURLSessionDataTask。

2) Upload Tasks (NSURLSessionUploadTask)

上传任务用于将数据上传到远程目标。我们可以使用NSURLSessionUploadTask。

3)Download Tasks (NSURLSessionDownloadTask)

下载文件并存储在临时位置。我们可以使用NSURLSessionDownloadTask。

NSURLSession和NSURLConnection的主要区别

NSURLConnection:

如果我们使用NSURLConnection建立开放连接,并且系统中断了我们的应用程序,则当我们的应用程序进入后台模式时,我们接收或发送的所有内容都将丢失。

NSURLSession

解决了这个问题,并且还提供了进程外下载。即使没有访问权限,它也可以管理连接过程。你需要使用NSURLSession。

  application:handleEventsForBackgroundURLSession:completionHandler in your AppDelegate

详细信息请参考 NSURLSession和NSURLConnection之间的区别


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接