文档翻译-NSURLConnection

本文主要是对官方文档中URLConnection类及其代理方法的翻译和总结. 文档连接如下 :

  • NSURLConnection
  • NSURLConnectionDelegate
  • NSURLConnectionDataDelegate
  • NSURLConnectionDownloadDelegate
温馨提示 : iOS9以后苹果宣布弃用NSURLConnection. 改用NSURLSession

NSURLConnection

一个NSURLConnection对象代表加载一个URL request内容. 然而NSURLConnection的接口很少, 仅仅是start/cancel一个异步请求. 你应该在URLRequest中做好一切设置.

概述


Note :
尽管该类的实例通常被称为 connection, 但是这个connection并不是跟底层的网络连接是1对1的关系.

NSURLConnection类提供了很多很方便的同步/异步加载URLRequest的方法, 并且使用block回调.

为了更好的对整个加载的流程做控制, 你可以成为NSURLConnection实例的代理, 实现NSURLConnectionDelegateNSURLConnectionDataDelegate协议. 这样connection在异步加载请求的时候就会告诉你加载的进度和状态等信息. connection也会调用代理的方法让用户重写它的默认行为. (例如指定一个特定的重定位URL等等. ) 这些代理方法将会在发起该异步请求的线程上调用.

Note :
在加载请求期间, connection会强引用他的代理. 当请求完成加载/加载失败/取消的时候就会释放这个强引用

关于NSURLError的信息在这里

方法


一些过期的方法就不贴出来了

  • 发送请求前

    • +canHandleRequest: : 发送请求之前可以用该方法测试请求是否合法.
  • 请求URL的信息

    • originalRequest : 原请求的一份深拷贝
    • currentRequest : 当前请求
  • 异步加载

    • -start : 开始异步加载请求
  • 停止加载

    • -cancel : 取消异步加载请求
  • 代理方法调度

    • -scheduleInRunLoop:forMode : 设置代理方法调用的RunLoop和模式.
    • -setDelegateQueue: : 设置代理方法调用的队列
    • -unscheduleFromRunLoop:forMode: : 设置代理方法不要在该RunLoop和模式下调用

NSURLConnection Protocols


NSURLConnection相关的有三个协议 :

  • NSURLConnectionDelegate
  • NSURLConnectionDataDelegate (继承NSURLConnectionDelegate)
  • NSURLConnectionDownloadDelegate (继承NSURLConnectionDelegate)

NSURLConnectionDelegate

主要负责证书的处理和请求完成/错误的处理, 所以几乎所有代理对象都必须遵循这个协议.

特殊情况下需要使用它的子协议 :

  • 使用Newsstand KitdownloadWithDelegate:方法, 代理对象就应该实现downloadDelegate.
  • 其他情况就实现dataDelegate.

如果代理想要自定义身份验证的处理方法的话就要实现connection:​will​Send​Request​For​Authentication​Challenge:​方法, 如果没有实现则会调用connection:​can​Authenticate​Against​Protection​Space:​, connection:​did​Receive​Authentication​Challenge:connection:​did​Cancel​Authentication​Challenge:​这两个已经弃用了的方法.

当请求发生错误的时候就会调用代理的connection:​did​Fail​With​Error:​方法. -connection​Should​Use​Credential​Storage:​只会在加载之前调用一次.

方法

  • 身份验证 :

    • connection:​will​Send​Request​For​Authentication​Challenge:​ : 告诉代理准备发送身份验证质询.
    • connection​Should​Use​Credential​Storage:​ : 决定URL加载器是否需要对身份验证做证书存储.
  • 请求加载完成 :

    • connection:didFailWithError: : 请求失败

NSURLConnectionDataDelegate

提供了上传的进度信息/下载的response data碎片. 并且它还提供了一个新的上传数据流, 如果服务器的响应需要再次请求连接的话(例如使用不同的证书重新发请求).

方法

  • 处理接受到的数据 :

    • connection:​did​Receive​Response:​ : 第一次收到数据
    • connection:​did​Receive​Data:​​ : 依次收到后来的数据
  • 加载进度 :

    • connection:​did​Send​Body​Data:​total​Bytes​Written:​total​Bytes​Expected​To​Write: : 发送一个类似HTTP POST请求的字典, 里面包含本次上传的数据长度, 已经上传的数据长度和总数据长度.
    • connection​Did​Finish​Loading:​ : 请求成功加载完成.
  • 重定向处理 :

    • connection:​will​Send​Request:​redirect​Response:​ : 做URL重定向处理
    • connection:​need​New​Body​Stream:​ : 当connection需要重新重传的时候提供一个原本的数据流.
  • 缓存策略 :

    • connection:​will​Cache​Response:​ : 当系统准备缓存该响应数据的时候告诉代理.

NSURLConnectionDownloadDelegate

提供下载进度信息, 下载完成时提供下载好的可访问的文件的URL. 可以实现断点续传.

代理类除了实现该协议的方法之外还需要实现其父类协议NSURLConnectionDelegate的方法.

方法

  • 管理下载 :
    • connection:​did​Write​Data:​total​Bytes​Written:​expected​Total​Bytes:​ : 下载的时候会一直调用这个方法, 利用这几个参数刷新UI的进度条
    • connection​Did​Resume​Downloading:​total​Bytes​Written:​expected​Total​Bytes:​ : 当恢复下载的时候告诉代理.
    • connection​Did​Finish​Downloading:​destination​URL:​ : 下载完成的时候告诉代理目标文件的URL.

由于iOS9之后, NSURLConnection已经被弃用了, 接下来会带来NSURLSession的文档翻译

你可能感兴趣的:(文档翻译-NSURLConnection)