1

与许多其他刚接触 Cocoa 的开发人员一样,我在代理和控制器的概念上苦苦挣扎。我掌握了基础知识,但有一件事困扰着我。实际上,每个解释都说“通常”或“在简单情况下”(这是他们作为示例给出的唯一示例)控制器和委托往往是同一个对象。这就引出了一个问题:你什么时候想为同一个接口对象分离控制器和委托?

4

1 回答 1

2

需要为您的委托使用单独的类时的两种一般情况是

  1. 当您需要执行不相关的操作以响应相同的委托消息时,或
  2. 当您想在多个视图或控制器之间共享委托的逻辑时。

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

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

使用控制器以外的另一个对象作为委托时要记住的一个注意事项:控制器应该保留/保持对委托的强引用,因为视图只会保留对它的弱/分配引用。有关这方面的更多信息,请参见委托的属性“分配”和“保留” 。

于 2012-06-08T04:27:28.603 回答