单独的代表和控制器

时间:2012-06-08 04:03:28

标签: objective-c cocoa model-view-controller delegates controller

正如许多其他开发人员对Cocoa一样,我很难与委托和控制器概念斗争。我得到了基础知识,但有一点让我烦恼。实际上每个解释都说“通常”或“在简单的情况下”(这是他们作为例子提供的唯一的)控制器和委托往往是同一个对象。 这导致了一个问题:您何时想要为同一个接口对象分离控制器和委托?

1 个答案:

答案 0 :(得分:2)

需要为委托使用单独的类的两种常见情况

  1. 当您需要执行不相关的操作以响应相同的委托消息时,或
  2. 当您想在多个视图或控制器之间共享委托的逻辑时。
  3. 第一种情况的示例是具有两个不相关的表的页面。每个UITableView都需要自己的委托,因此使用控制器作为委托将需要在每个委托方法中使用丑陋的if语句;在这种情况下,明确优先定义和使用单独的代表。

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

    在控制器之外使用另一个对象时要记住一个注意事项:控制器应该保留/保留对委托的强引用,因为视图只保留弱/赋值引用。有关详细信息,请参阅property "assign" and "retain" for delegate