文檔翻譯-NSURLConnection

本文主要是對官方文檔中URLConnection類及其代理方法的翻譯和總結. 文檔連接如下 :

溫馨提示 : 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的文檔翻譯

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容