第⼗七講:圖⽚片異步下載、KVO


本講內容

一、異步下載圖⽚片

二、UITableView中圖⽚片的異步下載

三、KVO

四、KVO監測Model圖⽚片下載




一、異步下載圖⽚片


圖⽚下載真實開發中,網絡接⼝返回的JSONXML數據中,通常不會直接包

含圖⽚,⽽是給出圖⽚的URL!

因此,需要根據圖⽚URL獲取圖片數據,以便UI展示。



圖⽚片下載

因爲HTTP協議是超文本傳輸協議,所以可以傳輸圖片。圖片下載與普通⺴⽹網絡請求流程相同:1、創建一個request

2、建立urlConnection3、使用請求到的數據。



練習⼀

根據圖片URL下載⼀一張圖⽚片,顯⽰示在UIImageView上。

ViewController中實現下載



ImageDownloader圖⽚片下載是iOS開發中常⽤用的功能,但系統並未提供圖⽚片下載類。

爲了便於後續使⽤用,可以將圖⽚片下載封裝到⼀一個類⾥裏⾯面(ImageDownloader)。

ImageDownloader 允許外界指定URL,提供 開始下載 和 取消下載功能,並提供delegateblock將圖⽚片傳遞給外界。




⼆二、UITableView異步下載圖⽚片


UITableView顯示圖片多數App中,UITableView都會顯示圖片。

UITableView的重用機制,讓我們能用很少的cell來呈現很多的內容(cellmodel的數量不統⼀一)。

爲了能正確顯示圖片,Model類應該提供圖片獲取功能(Model通過ImageDownloader下載圖⽚片,供cell使⽤用)。



UITableView顯示圖片

Model類注意事項:

1、除了包含必要的數據外,還要包含一個ImageDownloader對象。

2、包含⼀個image

3、包含⼀個圖⽚是否正在下載的BOOL值。(⽤用於判斷是否需要開始下載)

Cell注意事項:根據Model信息,做⻚面顯⽰示。



三、KVO


KVOKVO:(Key-Value-Observer)鍵值觀察者,是觀察者設計模式的⼀一種具體實現。

KVO觸發機制:⼀一個對象(觀察者),監測另⼀一對象(被觀察者)的某屬性是否發⽣生變化,若被監測的屬性發⽣生的更改,會觸發觀察者的⼀一個⽅方法(⽅方法名固定,類似代理⽅方法)

KVO使⽤用步驟:1、註冊觀察者(爲被觀察者指定觀察者以及被觀察屬性)2、實現回調⽅方法3、觸發回調⽅方法(被觀察屬性發⽣生更改)
4、移除觀察者



KVOKVO使⽤用場景:MVCMC通信,M發⽣生變化通知C。其中M是被

觀察者,C是觀察者。

KVO注意事項:觀察者銷燬之前,移除觀察者,否則會出現程序異常(給已經銷燬的對象發送消息)



練習三Person類的name屬性添加觀察者。name發⽣生變化

時,讓self.view的背景顏⾊色隨機改變。!

 提⽰示:界⾯面需要包含⼀一個輸⼊入框、⼀一個按鈕


四、KVO監測Model圖⽚片下載


cell圖⽚片及時顯⽰示tableView:cellForRowAtIndexPath:會在重⽤用的時候,根據Model

⽰示image或者placeholderImage。如果tableView並未滑動,此時有圖⽚片下載完畢,是不會⽴立即更新到

cell上的。如何及時更新圖⽚片?



KVO監測Model屬性tableView:cellForRowAtIndexPath:中,爲Modelimage屬性添加

觀察者。

image屬性由nil變爲⾮空的時候,視圖控制器根據indexPath更新cell顯⽰示。



總結ImageDownloader封裝了下載過程,提供了下載相關的方法。

KVO是觀察者模式中的⼀種,當被觀察屬性發⽣變化,會及時觸發相關事件。

tableView可以藉助KVO監測下載,及時更新cell



課程預告


數據持久化 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章