NSURLSession(不完善)

原创 2016年06月02日 11:54:34

NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的。在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。注意,如果用户强制将程序关闭,NSURLSession会断掉。而iOS 9中,已经放弃了NSURLConnection。

NSURLSession和它的相关类提供了我们通过HTTP协议下载数据的接口。它们提供给我们一系列代理方法来支持授权操作,并且当我们的程序退出或者在iOS中挂起时,能给我们的程序后台实现下载的能力。

使用NSURLSession接口,我们的程序会创建一系列会话(session),每个会话负责一组相关数据的传输任务。例如,当我们在开发一个网页浏览器时,你的程序应该会为每个标签页或者窗口创建一个会话。每个会话中我们会在程序中加入多个下载任务,每个任务代表一个具体的URL请求(以及如果该原始URL有HTTP回调,也负责回调的URL请求)。
参考:NSURLSESSION的使用

  • NSURLSession的优点
    • 能够暂停和恢复网络操作。不需要使用NSOperation就可以实现暂停、继续、重启等操作。
    • 可配置的容器。
    • 可以子类化并且可以设置私有存储方式。可以修改数据的存储方式和存储位置。
    • 改进了授权处理机制。
    • 代理更强大。
    • 通过文件系统上传和下载。
    • 在后台完成上述功能

官方文档是这么描述的:

The NSURLSession class and related classes provide an API for downloading content. This API provides a rich set of delegate methods for supporting authentication and gives your app the ability to perform background downloads when your app is not running or, in iOS, while your app is suspended.

The NSURLSession class natively supports the data, file, ftp, http, and https URL schemes, with transparent support for proxy servers and SOCKS gateways, as configured in the user’s system preferences. You can also add support for your own custom networking protocols and URL schemes (for your app’s private use).

跟大多数网络请求的接口一样,NSURLSession的接口也是支持异步的。如果你使用default(默认)工作模式,意味着使用系统提供的代理方法,你就必须要提供completion handler block 来返回请求成功或失败的结果数据。或者你也可以自定义代理对象,然后当收到服务器的数据时,任务对象就会调用这些代理方法,并将获取的数据传递过去。

NSURLSession接口提供了状态和进度属性,并通过它的代理里传值过去。它支持取消,恢复(重启),暂停任务,并提供恢复暂停的、取消的、失败的下载的能力。

理解URL Session的概念

会话中的任务如何执行取决于三点:会话的类型(它是由创建它的配置对象决定的)、任务的类型、当然任务创建时程序是在前台还是在后台运行

会话类型

NSURLSession接口提供三种类型的会话,他们是创建会话需要的configuration配置对象决定的。

1.默认会话(Default sessions):它跟Foundation框架的其他下载URLs的方法类似,他们使用一个可持续的基于磁盘的缓存并存储认证资质到用户的钥匙链中。 You can create a default session configuration by calling the defaultSessionConfiguration method on the NSURLSessionConfiguration class.

2.短暂会话(Ephemeral sessions):它不保存数据到磁盘中;所有的缓存,认证资质,以及其他的信息都保留在关联该会话的RAM内存中,因此,当会话作废时,这些数据都将自动丢失。You can create an ephemeral session configuration by calling the ephemeralSessionConfiguration method on the NSURLSessionConfiguration class.

3.后台会话(Background sessions):和默认会话类似,不过它提供一个独立的进程处理所有数据的传输。后台会话也会有一些限制,可以参考下面的段落内容:是否该使用后台传输。You can create a background session configuration by calling the backgroundSessionConfiguration: method on the NSURLSessionConfiguration class.

4.The singleton shared session (which has no configuration object) is for basic requests. It is not as customizable as sessions that you create, but it serves as a good starting point if you have very limited requirements. You access this session by calling the sharedSession class method. See that method’s discussion for more information about its limitations.(通常可以用这种)

The tasks in a session also share a common delegate that lets you provide and obtain information when various events occur—when authentication fails, when data arrives from the server, when data is ready to be cached, and so on. For all background downloads and uploads, you must provide a delegate that conforms to the NSURLSessionDownloadDelegate Objective-C protocol. Otherwise, if you don’t need any of the features provided by a delegate, you can use this API without providing a delegate by passing nil when you create a session.===>这些不同的session有同一个delegate,此处讲述了其用途

任务类型

NSURLSession类支持三种类型的任务:数据任务、下载任务和上传任务。

1.数据任务:使用NSData对象发送和接受数据。数据任务通常用来负责App和服务器之前交互请求。数据任务可以分片段一点一点从服务器返回数据也可以通过完成回调一次性返回全部数据。

2.下载任务:从文件中获取数据,并且支持在APP不运行时,后台下载。

3.上传任务:将文件中数据上传,并且支持Appl不运行时,后台上传。

URL Session Class Hierarchy — 类的继承关系
The NSURLSession API consists of the following classes (nested to show subclass relationships):

  • NSURLSession—A session object.
  • NSURLSessionConfiguration—A configuration object used when initializing the session.
  • NSURLSessionTask—The base class for tasks within a session.
    • NSURLSessionDataTask—A task for retrieving the contents of a URL as an NSData object
      • NSURLSessionUploadTask—A task for uploading a file, then retrieving the contents of a URL as an NSData object
    • NSURLSessionDownloadTask—A task for retrieving the contents of a URL as a temporary file on disk
    • NSURLSessionStreamTask—A task for establishing a TCP/IP connection

同时NSURLSession API提供五个协议方法用来控制会话和任务行为:

  • NSURLSessionDelegate—Defines delegate methods to handle session-level events
  • NSURLSessionTaskDelegate—Defines delegate methods to handle task-level events common to all task types
  • NSURLSessionDataDelegate—Defines delegate methods to handle task-level events specific to data and upload tasks
  • NSURLSessionDownloadDelegate—Defines delegate methods to handle task-level events specific to download tasks
  • NSURLSessionStreamDelegate—Defines delegate methods to handle task-level events specific to stream tasks

NSURLSession的API接口同样使用一些通用的API,而这些API同样被其他的类,比如NSURLConnection和NSURLDownload使用:

列示如下:

  • NSURL—An object that contains a URL.
    一个包含URL的对象
  • NSURLRequest—Encapsulates metadata related to a URL request, including the URL, request method, and so on.
    一个包含URL、请求方式等等的URL请求
  • NSURLResponse—Encapsulates metadata related to a server’s response to a request, such as the content MIME type and length.

  • NSHTTPURLResponse—Adds additional metadata specific to HTTP requests, such as response headers.

  • NSCachedURLResponse—Encapsulates an NSURLResponse object, along with the actual body data of the server’s response, for caching purposes.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

详解 NSURLSession

本文翻译自 NSURLSession Tutorial: Getting Started 本文来自简书,原文地址:http://www.jianshu.com/p/158e2a8c545e ...

NSURLSession和NSURLConnection比较

分别用NSURLSession和NSURLConnection实现数据的请求 以及NSURLSession和NSURLConnection中block参数的解释...

开发只懂 AFN ?搞定 NSURLSession 才是硬道理

由于傲娇的苹果在 iOS9 之后已经放弃了 NSURLConnection,所以在现在的实际开发中,除了大家常见的 AFN 框架,一般使用的是 iOS7 之后推出的 NSURLSession,作为...

NO.4还不完善的分析类型程序,出自书上

#include #include #include #include #define MAXTOKENS 100 #define MAXTOKENLEN 64 enum type_tag { ...

mysql学习点滴,附正确的crashcourse教材sql脚本,网上的脚本不完善,不能直接运行

安装mysql客户端:           yum install mysql   安装mysql 服务器端:           yum install mysql-serv...

Js写的捕鱼达人游戏源码笔记(不完善)

背景:cc.Class({ extends: cc.Component, properties: { //左边‘-’按钮 leftBtn:cc.Node,...
  • Cineze
  • Cineze
  • 2016年09月20日 19:50
  • 1132

自己写的记事本程序(功能不完善)

public partial class Form1 : Form { bool IsTextChanged = false; public Form1() ...
  • h0814
  • h0814
  • 2014年01月12日 01:52
  • 472

最短作业优先算法(不完善)

最短作业优先(SJF)是一种调试任务请求的调试策略。每个任务请求都含有请求时间(即向系统提交请求的时间)和持续时间(即完成任务所需时间)属性。当前任务完成后,SJF策略选择最短持续时间的任务执行;如果...
  • CET420
  • CET420
  • 2016年08月30日 14:55
  • 381

动态将摄像头bmp数据转换成jpg格式(不完善)

由于需要经常存储摄像头捕捉到的bmp数据

cocos2d-x中带光标的输入框(CCTextFieldTTF)(这个不完善,后期再继续研究)

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/azhou_hui/article/details/...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSURLSession(不完善)
举报原因:
原因补充:

(最多只允许输入30个字)