iOS网络编程2—NSURLSession使用
官网文档:NSURLSession class Reference
一、简介
NSURLSession是苹果公司用于处理简单的网络请求。
NSURLSession将NSURLConnection(废除)替换为NSURLSession和NSURLSessionConfiguration,
以及3个NSURLSessionTask的子类(相当于对应三中不同的任务):
NSURLSessionDataTask,NSURLSessionUploadTask, 和NSURLSessionDownloadTask
NSURLSessionConfiguration:
创建请求配置(枚举类型),有以下类型
1backgroundSessionConfiguration(不赞成使用)
backgroundSessionConfigurationWithIdentifier 后台处理配置(委托中不不能使用,是使用系统处理下载,就算App没有运行也可以实现)
ephemeralSessionConfiguration 这个是基于RAM的方式处理配置,数据时临时性的(适用于小数据)
defaultSessionConfiguration 这个是默认配置
而且它的对象可以通过timeoutInterForRequest属性设置连接超时间隔(在创建请求对象时也可以设置)
二、如何实现网络编程?
网络编程步骤:
1、获取URL
2、将地址封装到请求中
3、设置请求方式,及请求体(如果是post方法)
4、创建NSURLSession对象,并配置。
5、按需要创建任务类型(传输数据、上传、下载),适当加闭包
6、启动任务
7、按需求实现相关协议方法(如下载完成后,实现下载代理(NSURLSessionDownloadDelegate)中下载完成方法,进行通知)
具体实现代码截图
源代码:
//网络编程
func netProgramming(){
//1获取地址
let url = NSURL(string: "http://www.baidu.com")
//2封装
let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy,timeoutInterval: 20)//cachePolicy参数不理解
//3设置请求方式(如果使用get请求可以省略)
request.HTTPMethod = "post"
//4设置请求体(post请求独有,把数据转化为Data数据包达到保密效果)
let data = NSData(base64EncodedString: "数据块", options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)//options:参数不理解
let str = NSString(data: data! , encoding: NSUTF8StringEncoding)//【learn:NSUTF8StringEncoding是中文编码方式】
request.HTTPBody = data
//5创建会话对象并配置(设置代理,就要遵守协议【在类的开头】,配置为默认配置,代理方法可以执行在主线程)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: self, delegateQueue: nil)//代理方法可以设置在主线程
var task = session.dataTaskWithRequest(request, completionHandler: {
(data,response,error)->Void in
//获取数据(将数据转换为JSON对象)【learn】
let dic:NSDictionary = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary //options参数不明白?
})
task.resume()//一定记得//这个是启动任务的,不调用,则不会执行请求
}
提示:也可以不用设置请求,直接使用URL创建任务,是哟let task = session.dataTaskWithRequest(URL)
三、NSURLSessionDelegate代理方法
一般类需要遵循两个代理:NSURLSessionDelegate和NSURLSessionDataDelegate
在协议的方法中可以完成各种各样的回调动作,如身份验证、完成任务后的动作、错误处理和后台任务完成的动作等。委托方法指定在NSURLSession中一定数量的字节传输使用int64_t类型的参数
协议中的几个方法:
didReceiveData 处理请求时的数据
didCompleteWithError 在处理完请求后响应的事件
注:didReceiveData和didReceiveResponse,两个只能存在一个,didReceiveResponse高于didReceiveData,前者有的话,后者就不能执行
提示:创建任务时,创建的是什么任务就需要实现相关代理
相关文档协议:NSURLXXXXXXX,,NSURLSessionTaskDelegate,NSURLSessionDataDelegate NSURLRequest Class Reference NSURLSession Class Reference
参考博客:吴统威的博客-网络编程NSUURLSession【很有读头】
相关视频学习:http://edu.51cto.com/lesson/id-47874.html(包含下载任务,恢复下载等示例)