iOS网络编程2——NSURLSession使用

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)中下载完成方法,进行通知)

具体实现代码截图

 iOS网络编程2——NSURLSession使用_第1张图片

源代码:

//网络编程
    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(包含下载任务,恢复下载等示例)

你可能感兴趣的:(Swift,iOS)