本講內容
一、異步下載圖⽚片
二、UITableView中圖⽚片的異步下載
三、KVO
四、KVO監測Model圖⽚片下載
一、異步下載圖⽚片
圖⽚下載真實開發中,網絡接⼝返回的JSON或XML數據中,通常不會直接包
含圖⽚,⽽是給出圖⽚的URL。!
因此,需要根據圖⽚URL獲取圖片數據,以便UI展示。
圖⽚片下載
因爲HTTP協議是超文本傳輸協議,所以可以傳輸圖片。圖片下載與普通⺴⽹網絡請求流程相同:1、創建一個request。
2、建立urlConnection。3、使用請求到的數據。
練習⼀
根據圖片URL下載⼀一張圖⽚片,顯⽰示在UIImageView上。
在ViewController中實現下載
ImageDownloader圖⽚片下載是iOS開發中常⽤用的功能,但系統並未提供圖⽚片下載類。
爲了便於後續使⽤用,可以將圖⽚片下載封裝到⼀一個類⾥裏⾯面(ImageDownloader)。
ImageDownloader 允許外界指定URL,提供 開始下載 和 取消下載功能,並提供delegate或block將圖⽚片傳遞給外界。
⼆二、UITableView異步下載圖⽚片
UITableView顯示圖片多數App中,UITableView都會顯示圖片。
UITableView的重用機制,讓我們能用很少的cell來呈現很多的內容(cell和model的數量不統⼀一)。
爲了能正確顯示圖片,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使⽤用場景:MVC中M與C通信,M發⽣生變化通知C。其中M是被
觀察者,C是觀察者。
KVO注意事項:觀察者銷燬之前,移除觀察者,否則會出現程序異常(給已經銷燬的對象發送消息)
練習三給Person類的name屬性添加觀察者。name發⽣生變化
時,讓self.view的背景顏⾊色隨機改變。!
提⽰示:界⾯面需要包含⼀一個輸⼊入框、⼀一個按鈕
四、KVO監測Model圖⽚片下載
cell圖⽚片及時顯⽰示tableView:cellForRowAtIndexPath:會在重⽤用的時候,根據Model顯
⽰示image或者placeholderImage。如果tableView並未滑動,此時有圖⽚片下載完畢,是不會⽴立即更新到
cell上的。如何及時更新圖⽚片?
KVO監測Model屬性tableView:cellForRowAtIndexPath:中,爲Model的image屬性添加
觀察者。
image屬性由nil變爲⾮空的時候,視圖控制器根據indexPath更新cell顯⽰示。
總結ImageDownloader封裝了下載過程,提供了下載相關的方法。
KVO是觀察者模式中的⼀種,當被觀察屬性發⽣變化,會及時觸發相關事件。
tableView可以藉助KVO監測下載,及時更新cell。
課程預告
數據持久化