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

时间:2010-05-26 02:18:03

标签: objective-c

我正在研究一本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,由Mark和LaMarche开始的iPhone 3开发,由Apress出版

更新:我能够找到另一个更详细的SO线程:Method Syntax in Objective C

3 个答案:

答案 0 :(得分:4)

这是一个名为:

的方法
tableView:numberOfRowsInSection:

需要两个参数:

  • a UITableView*
  • a NSInteger

该方法还采用隐式self参数,该参数是调用它的实例。正如dreamlax所说,它还需要一个隐式的_cmd,这是当前被调用的方法。

正如马克所说,如果你符合某个界面,那么不使用某些参数是完全常见的。

答案 1 :(得分:2)

这是一个名为tableView:rowsInSection:的方法,UITableView为其代理指定。如果你有一个控制器负责几个UITableViews,那么tableView参数是存在的,这样它就可以告诉哪个控制器正在与它通信。如果您需要查询UITableView以获取信息以决定您想要做什么,这也很有用。这在委托方法中非常常见。

答案 2 :(得分:1)

此方法符合UITableViewDataSource协议。如果您熟悉C#或Java,协议就像interface

对于符合接口或协议的方法而言,忽略某些参数是完全合法的,并且不是太不正常。