1

和許多其他的新開發Cocoa的開發人員一樣,我也爲代表和控制器概念而努力。我瞭解基礎知識,但有一點讓我感到不適。幾乎所有的解釋都表明,「通常」或「簡單情況下」(這是他們僅舉的例子)控制者和代表往往是同一個對象。 這會導致一個問題:您想在何時爲相同的接口對象分開控制器和委託?使用一個單獨的類時,需要您的委託獨立的代表和控制器

回答

2

兩個一般情況下是

  1. 當你需要在響應相同的委託信息進行不相關的操作,或
  2. 當你想分享委託在多個視圖或控制器之間的邏輯。

第一種情況的例子是具有兩個不相關表格的頁面。每個UITableView都需要它自己的委託,因此使用控制器作爲委託在每個委託方法中需要一個醜陋的if語句;定義和使用單獨的代表在這種情況下顯然是首選。

第二種情況的例子是一組類似的頁面,它們顯示來自類似結構的表格的DB數據。頁面本身是非常不相似的,所以你不能完全重用控制器。如果您選擇將委託放入控制器中,那麼表視圖數據源背後的大部分邏輯都是相同的。您可以將代碼放入共享委託實現中,並讓每個控制器使用特定於此控制器關聯表的配置參數來實例化該委託。

使用除控制器之外的另一個對象作爲委託時,請記住一點:控制器應該保留/保留對委託的強引用,因爲該視圖將只保留弱/分配引用。有關詳細信息,請參見property "assign" and "retain" for delegate