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

时间:2015-01-23 08:07:27

标签: ios8 nsurlconnection nsurlsession cfnetwork

NSURLSession是新网络SDK,而不是Apple的NSURLConnection。第三个旧选择是CFNetwork。

这里的问题是找出它们之间的最大区别,以了解Apple为何会像这样发展。

由于

3 个答案:

答案 0 :(得分:35)

整个模型不同。 NSURLSession的设计基于这样的假设,即你会有很多需要类似配置的请求(标​​准的标题集等),并且如果你这样做会让生活更轻松。

NSURLSession还提供后台下载支持,可以在您的应用未运行时(或在iOS上的后台运行时)继续下载资源。对于某些用例,这也是一个重大胜利。

NSURLSession还提供相关请求的分组,从而可以轻松取消与特定工作单元关联的所有请求,例如在用户关闭窗口或选项卡时取消与加载网页相关的所有负载。

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

答案 1 :(得分:13)

<强> NSURLConnection的

构成基础URL加载系统的一组相互关联的组件:NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage及其同名,NSURLConnection

NSURLRequest对象被传递给NSURLConnection对象。委托(符合以前的非正式和协议)作为NSURLResponse异步响应,并且从服务器发送任何关联的NSData

在将请求发送到服务器之前,会查询共享缓存,并且根据策略和可用性,可以立即且透明地返回缓存的响应。如果没有可用的缓存响应,则使用选项缓存其对任何后续请求的响应。 在向服务器协商请求的过程中,该服务器可以发出认证质询,该质询由共享cookie或凭证存储自动处理,或由连接委托处理。注册的NSURLProtocol对象也可以截取传出请求,以便根据需要无缝地更改加载行为。

NSURLSession

除了同名类NSURLSession之外,

指的是一组相互依赖的类。 NSURLSession由与之前相同的部分组成,包括NSURLRequest,NSURLCache等,但用NSURLSession,NSURLSessionConfiguration和NSURLSessionTask的三个子类替换NSURLConnection:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。

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

答案 2 :(得分:8)

NSURLSession和NSURLConnection之间的区别

<强> NSURLSession

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

1) NSURLSession的设计基于这样的假设:您将需要大量需要类似配置的请求(标​​头集合等),并使生活更轻松。

2) NSURLSession还提供对后台下载的支持,这样可以在您的应用未运行时或在iOS上的后台运行时继续下载资源。

3) NSURLSession还提供相关请求的分组,轻松取消与特定工作单元关联的所有请求,例如取消与特定工作单元关联的所有请求,例如,当用户关闭窗口或标签时取消与加载网页相关的所有负载

4) NSURLSession还提供了使用块来请求数据的更好界面,它允许您将它们与委托方法结合使用,以进行自定义身份验证处理,重定向处理等。

NSURLSessionConfiguration Types

1)defaultSessionConfiguration

Creates a default configuration object that uses the disk-persisted global cache, credential and cookie storage objects.

2)ephemeralSessionConfiguration

Similar to the default configuration, except that all session-related data is stored in memory. Think of this as a “private” session.

3)backgroundSessionConfiguration

Lets the session perform upload or download tasks in the background. Transfers continue even when the app itself is suspended or terminated

NSURLSessionTasks的类型

1)数据任务(NSURLSessionDataTask)

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

2)上传任务(NSURLSessionUploadTask)

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

3)下载任务(NSURLSessionDownloadTask)

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

NSURLSession和NSURLConnection

之间的主要区别

<强> NSURLConnection的:

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

<强> NSURLSession

解决了这个问题,也让我们无法下载流程。即使我们没有访问权限,它也会管理连接过程。您需要使用

  application:handleEventsForBackgroundURLSession:completionHandler in your AppDelegate

有关详细信息,请参阅difference between NSURLSession and NSURLConnection