2010-05-26 64 views
5

我正在通过一个iPhone开发书*,而没有真正了解目标C.对于大多数情况下,我能够关注发生了什么,但有一些方法声明像下面的那个我有点麻烦解析。例如:有人可以解释这个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作为其当地称为“部分的”参数。但我不明白所有对tableView的引用,或者为什么在方法中没有使用它时需要一个参数。有人可以澄清这一点吗?谢谢。

* p。 258,从iPhone 3开发,由马克和拉马什,由Apress出版出版

更新:我能找到另一个SO跟帖说进入一些详细信息:Method Syntax in Objective C

+0

你应该首先学习Objective-C,你不会后悔的。阅读本书并完成所有练习:http://www.amazon.com/dp/0321566157 – 2010-05-26 07:12:26

回答

4

这是一种称为方法:

tableView:numberOfRowsInSection: 

它需要两个参数:

  • 一个UITableView*
  • 一个NSInteger

的方法,也需要一个隐式self参数,这是它被调用的实例用。作为梦幻笔记,它也需要隐含的_cmd,这是当前被调用的方法。

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

+0

还有一个很少被使用的隐式'_cmd'参数。 – dreamlax 2010-05-26 02:24:33

+0

什么是_cmd参数? – Shiki 2010-05-26 02:25:10

+1

@Shiki:我认为'_cmd'参数表示用于解析方法实现的选择器。在少数情况下,在多个选择器之间共享相同的方法实现,'_cmd'参数可以用来区分如何调用方法实现。除了运行时修改,我从来没有真正使用'_cmd'。 – dreamlax 2010-05-26 03:08:57

1

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

对符合接口或协议的方法来说,忽略一些参数是完全合法的,而且不会太异常。

2

这是一种名为tableView:rowsInSection:的方法,即UITableView为其代表指定的方法。 tableView参数是在你有一个控制器负责多个UITableViews的情况下,以便它可以告诉哪一个正在与之通话。如果你需要查询UITableView的信息以决定你想要做什么,这也很有用。这在委托方法中很常见。