为什么要使用协议,而不是直接调用方法?

时间:2013-07-10 22:03:49

标签: ios uitableview delegates protocols delegation

例如:UITableviewDelegate协议有tableView:didSelectRowAtIndexPath:。为什么将它作为协议中的委托方法而不是UITableView类中的方法并直接调用它?

2 个答案:

答案 0 :(得分:4)

实际上在UITableViewDataSource非委托中这是一个重要的区别。

委派的目的是将某些事情的责任转移到客户端代码。 UITableView本身不知道它需要创建什么类型的单元格。您的应用程序是知道细胞应该是什么样子以及它们如何运作的应用程序。这就是tableView要求dataSource(由协议定义)创建单元格的原因。

在Apple框架中,delegate通常用于侦听对象事件,dataSource用于提供内容。两者都是委托模式的形式。

如果你问,因为你想问一个表视图 - “索引路径上的单元格是什么?”您可以使用实例方法cellForRowAtIndexPath

答案 1 :(得分:0)

因为您可能希望其他类成为UITableViewController中表格视图的数据源。

这是一个简单而有点人为的例子来说明......

想象一下,您有一个带有两个表视图的视图控制器,其中显示了DataA和DataB,您可以按下每个表旁边的按钮转到该表全屏的另一个视图。您可以将其设置为具有两个UITableView和两个UIButton的视图控制器以及另一个MyFullScreenTableViewController子类的UITableViewController,然后您将完全拥有两个单独的对象,一个是DataA表的数据源,另一个是DataB表的数据源。因此,这些对象在第一个视图中为两个表提供单元格,并且它们还在全屏控制器中提供单元格 - 您可以根据它正在查看的表传递正确的数据源。