1

我知道 Objective-C 不支持方法重载。但是,我如何理解以下与“tableView”同名的委托方法?对我来说,这些方法似乎是重载的,但我不确定。

要让视图控制器表明它是 UITableView 委托,它必须实现 UITableViewDelegate 协议。以下是在视图控制器中实现的常见委托方法:

tableView:heightForRowAtIndexPath:
tableView:willDisplayCell:forRowAtIndexPath:
tableView:didSelectRowAtIndexPath:
tableView:didDeselectRowAtIndexPath:
tableView:commitEditingStyle:forRowAtIndexPath:
tableView:canEditRowAtIndexPath:
4

1 回答 1

7

您列出的所有方法都不同,因为选择器名称包括所有部分,而不仅仅是第一个冒号 ' :' 之前的部分。

这是在 Objective C 中尝试方法重载的示例(编译器将拒绝):

- addSomething:(NSObject *) toView:(UIView *)view
- addSomething:(UIView *) toView:(UIView *)view   // won't work

请注意,当存在同名的类方法实例方法变体时,您可以“重载”方法:

- addSomething:(NSObject *) toView:(UIView *)view 
+ addSomething:(NSObject *) toView:(UIView *)view  // this is OK

显然,您需要一个很好的理由来做一些可能会令人困惑的事情!

另请参阅此问题:

Objective-C中同名的类方法和实例方法

于 2013-01-18T17:16:47.037 回答