有人能解释一下Objective-C方法声明语法吗

有人能解释一下Objective-C方法声明语法吗,objective-c,Objective C,我正在阅读一本iPhone开发书籍*,但并不真正了解Objective C。在大多数情况下,我能够理解正在发生的事情,但是有一些方法声明,比如下面的声明,我在解析时遇到了一些问题。例如: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section { return [self.controllers count]; //controllers is an instance

我正在阅读一本iPhone开发书籍*,但并不真正了解Objective C。在大多数情况下,我能够理解正在发生的事情,但是有一些方法声明,比如下面的声明,我在解析时遇到了一些问题。例如:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
  return [self.controllers count]; //controllers is an instance variable of type NSArray in this class
}
看起来这是一个名为numberOfRowsInSection的方法,它返回一个NSInteger,并将一个NSInteger作为一个局部称为“section”的参数。但我不理解对tableView的所有引用,也不理解为什么在方法中没有使用参数时,它会接受参数。有人能澄清一下吗?谢谢

*p。258,开始iPhone3开发,由马克和拉马尔奇撰写,由Apress出版


更新:我找到了另一个SO线程,该线程更详细一些:

此方法符合协议。如果您熟悉C#或Java,那么协议就像一个应用程序


符合接口或协议的方法忽略某些参数是完全合法且不太反常的。

这是一种称为:

tableView:numberOfRowsInSection:
它需要两个参数:

  • a
    UITableView*
  • a
    NSInteger
该方法还采用隐式的
self
参数,该参数就是调用该方法的实例。正如dreamlax所指出的,它还采用隐式的
\u cmd
,这是当前被调用的方法


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

这是UITableView为其委托指定的一种名为
tableView:rowsInSection:
的方法。如果有一个控制器负责多个UITableView,那么就有
tableView
参数,这样它就可以知道哪个控制器正在与它对话。如果您需要查询UITableView以获取信息以决定要执行的操作,那么它也很有用。这在委托方法中非常常见。

和一个很少使用的隐式
\u cmd
参数。\u cmd参数的用途是什么?@Shiki:我想,
\u cmd
参数表示用于解析方法实现的选择器。在少数情况下,同一方法实现在多个选择器之间共享,可以使用
\u cmd
参数来区分如何调用方法实现。除了运行时的混乱,我从来没有真正使用过
\u cmd
。你应该先学习Objective-C,你不会后悔的。阅读本书并做所有练习: