IOS:Objective-C中奇特的方法声明语法理解

//下面的语法真的很奇特,按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;
{ //实现 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值