1

和许多其他的新开发Cocoa的开发人员一样,我也为代表和控制器概念而努力。我了解基础知识,但有一点让我感到不适。几乎所有的解释都表明,“通常”或“简单情况下”(这是他们仅举的例子)控制者和代表往往是同一个对象。 这会导致一个问题:您想在何时为相同的接口对象分开控制器和委托?使用一个单独的类时,需要您的委托独立的代表和控制器

回答

2

两个一般情况下是

  1. 当你需要在响应相同的委托信息进行不相关的操作,或
  2. 当你想分享委托在多个视图或控制器之间的逻辑。

第一种情况的例子是具有两个不相关表格的页面。每个UITableView都需要它自己的委托,因此使用控制器作为委托在每个委托方法中需要一个丑陋的if语句;定义和使用单独的代表在这种情况下显然是首选。

第二种情况的例子是一组类似的页面,它们显示来自类似结构的表格的DB数据。页面本身是非常不相似的,所以你不能完全重用控制器。如果您选择将委托放入控制器中,那么表视图数据源背后的大部分逻辑都是相同的。您可以将代码放入共享委托实现中,并让每个控制器使用特定于此控制器关联表的配置参数来实例化该委托。

使用除控制器之外的另一个对象作为委托时,请记住一点:控制器应该保留/保留对委托的强引用,因为该视图将只保留弱/分配引用。有关详细信息,请参见property "assign" and "retain" for delegate