zoukankan      html  css  js  c++  java
  • NSURLSession -- 备忘

    NSURLSession

    NSURLSession是iOS7出的API,在它之前常用的原生网络库是NSURLConnection,但是因为Connection的使用起来不是很方便 所以我们一直倾向于AFNetworking,AFNetworking的确非常强大 但是我们也不该遗忘NSURLSession 因为NSURLSession使用起来也很方便。

    NSURLSession的三种工作模式:

    • 默认会话模式:这个模式是使用磁盘缓存的持久化策略,使用用户keychain中保存的证书进行认证授权。
    • 瞬时会话模式:这个模式不使用磁盘缓存任何数据,所有的缓存,证书,cookie等都是保存在RAM中的,所以当程序退出时 这些缓存会被清理掉。
    • 后台会话模式:这个模式在后台完成上传下载功能,需要创建Configuration对象

    NSURLSession的三种任务:

    • 请求数据任务
    • 上传文件任务
    • 下载文件任务

    配置类:NSURLSessionConfiguration

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.allowsCellularAccess = true
    configuration.discretionary = true
    configuration.timeoutIntervalForRequest = 30.0
    configuration.timeoutIntervalForResource = 60.0
    configuration.HTTPAdditionalHeaders = ["Accept" : "application/json"]
    configuration.HTTPMaximumConnectionsPerHost = 5
    

     初始化类方法:

    • NSURLSessionConfiguration.defaultSessionConfiguration():默认工作模式
    • NSURLSessionConfiguration.ephemeralSessionConfiguration():瞬时工作模式
    • NSURLSessionConfiguration.backgroundSessionConfiguration(identifier: String):后台工作模式(iOS7)
    • NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(identifier: String):后台工作模式(iOS8)

    常用属性:

    • allowsCellularAccess:是否允许使用蜂窝网络连接。
    • discretionary:是否允许自由配置,当设置为true的时候 由系统选择最佳的网络连接。在上传和下载任务的时候建议设置为true 因为系统会使用最优的模式进行任务(把WiFi和电量考虑在内)。
    • timeoutIntervalForRequest:规定请求超时时间,如果请求在规定时间内没有被发出,就会超时。
    • timeoutIntervalForResource:规定请求超时时间,如果在指定时间内无法找到请求的资源时,就会超时。
    • HTTPAdditionalHeaders:设置额外的请求头配置。
    • HTTPMaximumConnectionsPerHost:限制最大的网络连接数量

    NSURLSession

    let session = NSURLSession.sharedSession()
    let session = NSURLSession(configuration: configuration)
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
    

     三个初始化方法:

    • NSURLSession.sharedSession():获取全局共享的会话,将使用全局的缓存,cookie和证书。
    • NSURLSession(configuration: configuration):通过配置对象创建一个session类。
    • NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue()):和第二个方法类似,额外设置了代理和代理线程来相应各种事件

     

    NSURLSessionTask

    NSURLSessionTask是抽象类,一般使用的是它的三个子类:

    • NSURLSessionDataTask:最常用,获取json数据。
    • NSURLSessionUploadTask:主要用于上传文件。
    • NSURLSessionDownloadTask:主要用于下载文件。

    NSURLSessionDataTask

    通过URL创建

    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
            
            let url = NSURL(string: "some request path")
            let task = session.dataTaskWithURL(url!)
    /* -------------------------------分割线------------------------------- */
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue()) let url = NSURL(string: "some request path") let task = session.dataTaskWithURL(url!) { (data, response, error) in // 请求后操作 }

    通过URLRequest创建

            let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue())
            let url = NSURL(string: "some request path")
            let request = NSURLRequest(URL: url!)
            let task = session.dataTaskWithRequest(request)
            
            
            /* -------------------------------分割线------------------------------- */

    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue()) let url = NSURL(string: "some request path") let request = NSURLRequest(URL: url!) let task = session.dataTaskWithRequest(request) { (data, response, error) in // 请求完成操作

    NSURLSessionUploadTask

            let task = session.uploadTaskWithStreamedRequest(request)
            let task = session.uploadTaskWithRequest(request, fromData: someData)
            let task = session.uploadTaskWithRequest(request, fromFile: fileUrl)
            let task = session.uploadTaskWithRequest(request, fromData: someData) { (data, response, error) in
                // 上传完成操作
            }
            let task = session.uploadTaskWithRequest(request, fromFile: fileUrl) { (data, response, error) in
                // 上传完成操作
            }
    

     

    NSURLSessionDownloadTask

     通过URLRequest创建

     

            let downloadTask = session.downloadTaskWithRequest(request)
            let downloadTask = session.downloadTaskWithRequest(request) { (url, response, error) in
                // 下载完成操作
            }
    

     

     通过URL创建

     

            let downloadTask = session.downloadTaskWithURL(url!)
            let downloadTask = session.downloadTaskWithURL(url!) { (url, response, error) in
                // 下载完成操作
            }
    

     

     继续下载

            let downloadTask = session.downloadTaskWithResumeData(resumeData)
            let downloadTask = session.downloadTaskWithResumeData(resumeData) { (url, response, error) in
                // 下载完成操作
            }
    
  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/Alex-sk/p/5573837.html
Copyright © 2011-2022 走看看