//下面的语法真的很奇特,按Apple的UITableView.h声明
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
实际的方法名 tableView:cellForRowAtIndexPath
也就是在Objective-c中,方法声明中的:左边的部分全部做为方法的一部分,在Objective-c中没有命名参数。通过上述方式,能够做到清晰定义方法的目的。
理解下来,实际上与Java、C++的方法重载的定义方式有殊途同归之势。
在Java/C++中,通过命名参数的方式,实际上在编译器内部会生成C style的函数名,如:
void test(String s);
--> _test_string
也就是将参数的一部分作为最终编译器能够识别的函数命名部分,这是在高层实现函数重载的基础。虽然我们看起来重载的函数能够命名成函数名相同,但参数类型不同或参数顺序不同,就可以简单调用一个函数来实现接受不同类型参数的重载目的,但是在编译器层面,则是会生成根据函数命名加上参数类别来唯一标识的函数命名方式(c style).
在Objective-c中应该是充分利用这点,然后加上清晰的参数命名风格,才形成了现在这样的命名方式,在编译器内部,应该仍然是c style的函数命名方式,也就是参数命名组成的c函数,从而编译器能够唯一识别出来。
基于以上理解,objective-c中方法的定义可以是N个:分割的部分组成,各部分既是参数也是方法的一部分,当然我们会通过:右边的部分显式的提供一个参数命名。(在编译器内部只关心参数类型,参数命名会自动转换成编译器定义的命名)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{ //实现 }