委派的概念簡單來說就是,一個物件幫另外一個物件處理某些任務。一個委派物件透過其 conform 的 protocol 來釐清他應該處理哪些任務。而 protocol 當中有一些 method 是設定為 optional 的,這類的 method 在 conform 該 protocol 的時候,不一定需要實作。
可以想像經理和秘書的關係,經理像是一個物件,秘書就像是一個委派物件。當經理需要傳真文件的時候,會發出一個訊息,告訴秘書(委派物件),這件事該由他來做。秘書要怎麼知道要傳真到哪裡呢?當然這個消息是由經理提供,因為秘書 conform 的 protocol 當中,有明確的規範傳真這件事情的輸入參數,所以只要提供正確的資料就能夠正確的執行代理任務。
@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
如上程式碼:DetailViewController 是一個 UIViewController 並且 conforms UITableViewDelegate 和 UITableViewDataSource 兩個 protocol。代表 DetailViewController 這個類型的物件可以當做 UITableView 的 delegate 和 data source。
參考資料:
iPhone Programming Concepts – The Delegate
Delegates and Protocols
Delegation pattern
設計模式複習筆記(委托機制)
Delegates and Data Sources
......