【问题标题】:Overloading methods is not supported in Objective-CObjective-C 不支持重载方法
【发布时间】:2013-01-18 16:55:03
【问题描述】:

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

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

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

【问题讨论】:

  • 这些都是不同的。整个字符串,包括 ':' 和后面的所有内容都是方法/选择器名称的一部分。

标签: objective-c


【解决方案1】:

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

以下是在 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

显然你会想要一个很好的理由来做这样可能令人困惑的事情!

另请参阅此问题:

Class method and instance method with the same name in Objective-C

【讨论】:

  • 请接受我的回答,谢谢。点击答案左边的勾号,它应该变成绿色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2011-07-12
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多