DataSource 與 Delegate 是啥?

WU Hsien You
2 min readFeb 28, 2017

--

開始尋找下家中,某天面試中被問的問題“TableView的DataSource 及Delegate 的作用?”

說真的,在被問到這問題前,我真沒意識到,這兩有啥差別。但查了一下,就是有那一點差別。

基本上所的DataSource及Delegate都是都是同樣的機制(Delegate 委託代理),那為啥會這題呢?

在“KKBOX iOS/Mac OS X 基本開發教材”中寫到:

一個 class 可以根據需要,將 delegate拆成好幾個,以 UITableView 來說,跟表格中有什麼資料有關的,就放在 data source 中,其餘的 method 放在 delegate 中。

有些有看沒有懂,在翻了“[iOS] Delegate 與 Datasource”及“[iOS]使用protocol实现delegate和datasource传值”這兩篇後,就有那感覺了。

Delegate:處理介面,通過這裡,將所有對於畫面上的操作反映回系統。

DataSource:處理資料,經由這裡,將所有要顯示在畫面上的資料傳過去。

那Delegate 委託代理 又是啥?

iOS开发-Protocol协议及委托代理(Delegate)传值”,“Protocol,Delegate,Category,Extension等的实现,原理,使用场景”這兩篇,分別是道:

它本身是一个设计模式,它的意思是委托别人去做某事。

主要任务是帮忙完成一些我们不想做的事情。

再來Protocol(協議),這又是啥?

因為Object-C是不支持多繼承的,所以很多時候都是用Protocol(協議)來代替。 Protocol(協議)只能定義公用的一套接口,但不能提供具體的實現方法。也就是說,它只告訴你要做什麼,但具體怎麼做,它不關心。

--

--