NSURLSession

//

//  ViewController.swift

//  下载器demo

//

//  Created by 曾志良 on 15/9/14.

//  Copyright (c) 2015 曾志良. All rights reserved.

//


文字述说

NSURLSession 是一个代替NSURLConnection的API。它提供影响政策的选择,以及各方面NSURLRequest从网络获取对象的机制。

一个NSURLSession可以绑定到委托对象。代表是为某些事件在会话期间的生命期内被调用,例如服务器身份验证或确定是否要加载的资源应该被转换成下载。

NSURLSession实例是线程安全的。

默认的NSURLSession使用系统提供的代理和适合使用在有代码使用“ +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]”的地方

 NSURLSession创建NSURLSessionTask对象,NSURLSessionTask对象起着负载资源的作用,这类似于NSURLConnection对象但提供更多的控制和统一委托模型。

NSURLSessionTask对象创建的时候总是处于暂停状态,在执行之前必须发送恢复的信息。resume()


NSURLSessionTask的子类用于语法上区分数据和文件下载。


NSURLSessionDataTask通过对URLSession:dataTask:didReceiveData: delegate方法进行一系列请求,来接收资源。这是这类型的任务最常用的检索对象,用于用户直接解析。

NSURLSessionUploadTask 和NSURLSessionDataTask不同于在在它的实例是如何构造。上传任务是显式创建的,通过引用文件或数据对象来上传,或利利用URLSession:task:needNewBodyStream: delegate来上传body。


NSURLSessionUploadTask将响应数据直接写入临时文件,完成后,委托发送URLSession:downloadTask:didFinishDownloadingToURL:和给予机会
把这个文件在沙箱容器的一个永久的位置,否则读取文件。如果取消NSURLSessionDownloadTask可以生产一个data blob,可以用于恢复下载在接下来的时间。


//记录

//NSURLSession 是一个代替NSURLConnectionAPI。它提供影响政策的选择,以及各方面NSURLRequest从网络获取对象的机制。




代码展示


import UIKit


class ViewController: UIViewController,NSURLSessionDownloadDelegate {

   

    @IBOutlet var progressView: UIProgressView!

    

    //var progressView:UIProgressView


    override func viewDidLoad() {

        super.viewDidLoad()

       

// ============获取NSURLSession类对象有几种方式:===================================================

//        第一种方式是使用静态的sharedSession方法,该类使用共享的会话,该会话使用全局的CacheCookie和证书。

//        

//        第二种方式是通过sessionWithConfiguration:方法创建对象,也就是创建对应配置的会话,与NSURLSessionConfiguration合作使用。

//        

//        第三种方式是通过sessionWithConfiguration:delegate:delegateQueue方法创建对象,二三两种方式可以创建一个新会话并定制其会话类型。该方式中指定了session的委托和委托所处的队列。当不再需要连接时,可以调用SessioninvalidateAndCancel直接关闭,或者调用finishTasksAndInvalidate等待当前Task结束后关闭。这时Delegate会收到URLSession:didBecomeInvalidWithError:这个事件。Delegate收到这个事件之后会被解引用。

        

     

  //==========================第一种方式====================================================

        

        

        

        let session=NSURLSession.sharedSession()

  

        let url=NSURL(string: "http://www.douban.com/j/app/radio/channels")

        

        var data=NSData(contentsOfURL: url!)

    

        

        

// NSURLSession创建NSURLSessionTask对象,NSURLSessionTask对象起着负载资源的作用,

// 这类似于NSURLConnection对象但提供更多的控制和统一委托模型。

        let dataTassk=session.dataTaskWithURL(url!, completionHandler:  { (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in

            let json: AnyObject?=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil)

            

                println("第一种方式的结果de json\(json)")

            

        

        })

        dataTassk.resume()//NSURLSessionTask对象创建的时候总是处于暂停状态,在执行之前必须发送恢复的信息。



 //==============================第二种方式===========================================================

        

        

           let url2=NSURL(string: "http://www.douban.com/j/app/radio/channels")

        

           let sessionConfiguration=NSURLSessionConfiguration.defaultSessionConfiguration()

        

        

           let session2=NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)

        

        

           var task2=session2.downloadTaskWithURL(url2!)

        

            task2.resume()

        

        


        

        

            }

    

//==============================第二种方式===========================================================

    //下载完成时调用的方法

    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL){

        

        let data=NSData(contentsOfURL: location)

        

        let json2=NSString(data: data!, encoding: NSUTF8StringEncoding)

        

        println("2种方式的结果de json\(json2)")

        

    }

    

    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64){

    

    var progress=Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)

        

      

        //

        dispatch_async(dispatch_get_main_queue(),{()->Void in

        

             self.progressView.progress=progress

        })

 

        

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    

    }



}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值