有人可以解释这个Objective C方法声明语法

Can somebody explain this Objective C method declaration syntax

我正在编写一本iPhone开发手册*,但实际上并不了解目标C。在大多数情况下,我都能够了解正在发生的事情,但是有一些方法声明,如下面的方法声明,我在分析时遇到了一些问题。例如:

1
2
3
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
  return [self.controllers count]; //controllers is an instance variable of type NSArray in this class
}

看起来这是一个名为NumberOfRowsPreagon的方法,它返回一个nsInteger,并将nsInteger作为一个本地称为"section"的参数。但我不理解对TableView的所有引用,也不理解为什么在方法中不使用它时,它会接受一个参数。有人能解释清楚吗?谢谢。

*第258页,开始iPhone3开发,由Mark和Lamarche撰写,由Apress出版

更新:我找到了另一个更详细的so线程:目标C中的方法语法


这是一个名为:

1
tableView:numberOfRowsInSection:

它需要两个参数:

  • UITableView*
  • NSInteger

该方法还采用隐式self参数,即调用它时使用的实例。正如Dreamlax所指出的,它还采用隐式_cmd,这是当前被调用的方法。

正如Mark所说,如果您符合某个接口,那么不使用某些参数是完全常见的。


这是一个名为tableView:rowsInSection:的方法,UITableView为其委托指定了该方法。如果你有一个控制器负责几个合适的视图,那么tableView的论点就存在了,这样它就可以分辨出哪个控制器在和它说话。如果需要查询uiTableView以获取信息以决定要执行的操作,那么它也很有用。这在委托方法中非常常见。


此方法符合UITableViewDataSource协议。如果你熟悉C语言或Java,协议就像一个接口。

对于一个符合接口或协议的方法来说,忽略一些参数是完全合法的,也不算太反常。