IOS7引入API之NSURLSession入门介绍

ios7引入了nsurlsession,通过它可以支持后台相关的网络操作的新特性:

1.后台上传下载;

2.不需要通过nsoperation,直接用nsurlsession的api就可以做到网络操作的暂停和恢复。

3.作为可配置的容器:例如你可以设置http头的一些属性并且保存在session里,不用重复去做配置

4.可以子类化并支持私有配置的session

5.对鉴权的回调做了改进,此前nsurlconnection的鉴权回调无法和请求进行匹配,该回调可能来自任意的请求;而现在每个请求都可以在指定的代理方法中对其进行处理.

nsurlsession层次结构示意图:

可以看到,它包含了配置、代理还有用来处理各种任务的task,在task里面实现了各种不同的http请求。task的结构图如下:

我们可以看到其中子类化了上传下载的任务,并且支持挂起/恢复/取消的操作;返回的nsdata需要自己去处理,这点比起afnetworking的便捷程度可以说有所不如,毕竟afnetworking是在更高的层次进行了封装。

进行一次标准的网络操作我们分为如下几步:

step1:配置session,比如配置请求的header;配置是否保存缓存、cookie、证书等

代码示例如下:

        NSURLSessionConfiguration
*config = [NSURLSessionConfiguration ephemeralSessionConfiguration];

 

        // 2

        [config setHTTPAdditionalHeaders:@{@"Authorization":[Dropbox
apiAuthorizationHeader]}];

 

        // 3

        _session =
[NSURLSession sessionWithConfiguration:config];

step2:

使用生成的session调用任务方法,保存方法返回的task;对该task执行resume操作(默认生成的task是处于挂起状态)。

此处的任务方法有两种类型,一种是taskwithurl,一种是taskwithrequest,简单来说只针对url请求就可以调用withurl方法,如果需要在请求中带上更多内容进行一些配置的话需要采用taskwithrequest相关的方法。

代码示例如下:

NSURL*url
= [Dropbox appRootURL];

 

// 2

NSURLSessionDataTask
*dataTask =

[self.session dataTaskWithURL:url

            completionHandler:^(NSData*data,

                                NSURLResponse *response,

                                NSError *error){

    if
(!error){            

        // TODO 1: More coming here!

    }                

}];

 

// 3  

[dataTask resume];

step3:

在上一步请求中的block实现结果解析(nsdata需要根据接口具体情况(一般是服务器侧决定的)解析成可以理解的数据,如json/xml/plist等);也可以不在block中进行相关操作,而是实现相关的代理方法(需要在step1中先设置session的代理),对相关的结果/进度等进行处理。

urlsession相关的代理方法有很多,这里不一一列举,主要有以下几组协议:

@protocol NSURLSessionDelegate <NSObject>  // session的代理,相当于所有协议的父类  

@protocol NSURLSessionTaskDelegate <NSURLSessionDelegate>  // task的代理,其父协议是NSURLSessionDelegate

@protocol NSURLSessionDataDelegate <NSURLSessionTaskDelegate>
// datatask的代理,其父协议是NSURLSessionTaskDelegate

@protocol NSURLSessionDownloadDelegate <NSURLSessionTaskDelegate>  // downloadtask的代理,其父协议是NSURLSessionDataDelegate

结合其对应类的层次关系,相关的几组协议的关系也就不难理解了。

时间: 2024-12-30 21:52:40

IOS7引入API之NSURLSession入门介绍的相关文章

ECC加密算法入门介绍

加密|算法 ECC加密算法入门介绍 前言 同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一样,ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)也属于公开密钥算法.目前,国内详细介绍ECC的公开文献并不多(反正我没有找到).有一些简介,也是泛泛而谈,看完后依然理解不了ECC的实质(可能我理解力太差).前些天我从国外网站找到些材料,看完后对ECC似乎懵懂了.于是我想把我对ECC的认识整理一下,与大家分享.当然ECC博

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 本篇文章的目的在于把框架自带的一些好用,封装好的一些方便开发的类库简单的说一下,灵活使用可以提高开发效率,再就是因为在交流过程中有很多童鞋提出了一些关于什么样的项目怎么用API和web端怎么使用API这类的问题,我就我的理解把我的一些想法和大家交流一下,最后是对于入门篇做一下总结,以及对后面的一些教程做一下说明. 附上: 官网地址

[Python爬虫] scrapy爬虫系列 &amp;lt;一&amp;gt;.安装及入门介绍

        前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更为广泛使用的Python爬虫框架是--Scrapy爬虫.这是一篇在Windows系统下介绍 Scrapy爬虫安装及入门介绍的相关文章.         官方 Scrapy  :http://scrapy.org/         官方英文文档:http://doc.scrapy.or

初识Django —Python API接口编程入门

初识Django -Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言,基于Django框架,利用MVC模型,实现后台方面的针对数据库的API开发.先了解一下互联网的WEB架构, 如上图: 互联网的WEB架构大致分为三层,web层.app层和数据库层.Web层:如apache网站服务器:app层主要是应用业务:DB指后台数据库.随着互联网的高速发展,网站访问量的增长.数

[Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

        最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的"原图"等,此时尝试学习Phantomjs和CasperJS来解决这个问题.这第一篇文章当然就是安装过程及入门介绍. 一. 安装Phantomjs         下载地址:http://phantomjs.org/        官网介绍:          PhantomJS is a headless WebKit scriptable w

Bag-of-words模型入门介绍文章

一篇给力的Bag-of-words模型入门介绍文章 引言   本blog之前已经写了四篇关于SIFT的文章,请参考九.图像特征提取与匹配之SIFT算法,九(续).sift算法的编译与实现,九(再续).教你一步一步用c语言实现sift算法.上,及九(再续).教你一步一步用c语言实现sift算法.下.  上述这4篇文章对SIFT算法的原理和C语言实现都做了详细介绍,用SIFT做图像匹配效果不错.现在考虑更为高层的应用,将SIFT算法应用于目标识别:发现图像中包含的物体类别,这是计算机视觉领域最基本也

基础Python的socket编本入门介绍

  基础Python的socket编本入门介绍          这篇文章主要介绍了最基础的Python的socket编程入门教程,包括最基本的发送和接受信息等内容,需要的朋友可以参考下 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的socket功能封装在socket库中,要使用socket,记得先import socket,socket库的详细介绍参

.NET读写Excel工具Spire.Xls使用(1)入门介绍

原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装Excel,对于服务器,有时候还需要为配置IIS权限.折腾人,看到很多人在群里面使用这个东西,出现各种抓狂的错误: 2.开源.NET组件NPOI方式:这个方式应该是很多人都在使用的,这个开源的组件相比第一种,虽然稍微简单了点

创建 REST API 的最佳入门教程

创建 REST API 的最佳入门教程 如果你看到这里,你以前可能听说过API 和REST,然后你就会想:"这些都是什么东西?".也许你已经了解过一些这方面的知识,但却不知道从何入手.在这个教程中,我将会诠释REST的基础以及如何给应用创建一个API(包括认证授权). (题图来自: trongloop.com) 什么是API? API是Application Programming Interface应用编程接口的缩写,它是拿来描述一个类库的特征或是如何去运用它.你个人收藏的类库也许包