天天看點

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

教你如何封裝異步網絡連接配接nsurlconnection實作帶有百分比的下載下傳

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

注:本教程需要你對block有着較為深刻的了解,且對如何封裝對象有着一些經驗.

也許你已經用慣了afnetworking2.0,或者是asihttprequest(這個已經都不更新了,還不支援arc,放棄為妙^_^),或者還有其他輕量級的開源代碼.用着是很爽,但有時候我們隻想實作簡單的功能,用不着那麼複雜,而且,那些開源代碼太多,我們很難了解,那就嘗試一下自己封裝一個簡單的吧.

nsurlconnection有着兩種類型的實作,一種是同步的:

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

使用非常簡單,它直接根據request傳回一個data給你,不過因為是同步的,會阻塞主線程,你可以将他放到線程中就能把它變成異步的了,很easy,自己嘗試.

剩下的幾種基本上都是異步的了,實作起來也很容易,繼承幾個協定實作幾個方法而已嘛.

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

上面的這麼多操作,你隻完成了一個功能,那就是下載下傳一張圖檔而已.

如果我們能把一個網絡位址連結抽象成一個對象,而這個對象來處理所有的這些操作,不需要我們把它暴露出來,比如像下面的使用方式:

某某類   *對象1 = [初始化一個網址];

[對象1 開始執行網絡請求];

[對象1 監測下載下傳狀況];

.......

像上面的使用方式,非常接近人的思維方式,給連結位址,開始下載下傳,監控下載下傳狀況,我們就應該這麼用嘛.

那我們就按照這種套路來設計我們的類了.

能初始化一個網址以及有一個開始操作:

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

如何才能夠不用協定就可以擷取到下載下傳進度呢(監測下載下傳狀态),我們就用block當做屬性來擷取下載下傳進度:

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳
教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

以下是一份完整的代碼:

要下載下傳東西我們需要能夠存儲資料,因為是下載下傳,肯定也需要有網絡連結,我們還需要知道下載下傳資料期望的最大數值,要不然我們怎麼表示進度呢?

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

基本思路就是這樣子的,我們開始寫代碼了:

代碼很簡單,需要你對block有一定的了解,你拷貝如上兩段代碼到你的工程檔案中,可以看看是怎麼實作的.

現在來看看怎麼使用:

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

比你之前直接用系統的那個nsurlconnection清爽了很多很多倍,對吧.

以下是下載下傳圖檔時運作的截圖:

教你如何封裝異步網絡連接配接NSURLConnection實作帶有百分比的下載下傳

隻要你願意,你想怎麼封裝就怎麼封裝,就是這麼簡單,自己動手,豐衣足食^_^.