有人可以解释Objective-C中的函数名吗?

Can someone explain function names in Objective-C?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Method Syntax in Objective C

所以我得到了更常见的功能,比如:

1
2
3
4
5
-(void)viewDidUnload{

    self.controllers = nil;
    [super viewDidUnload];
}

然而,由于来自不同的编程背景,我有时会遇到如下问题:

1
2
3
4
5
6
-(NSInteger) tableView: (UITableView *)tableView
numberOfRowsInSection:(NSInteger)section{

    return [self.controllers count];

}

所以我知道函数返回一个nsinteger。然而,在如何在精神上组织函数名的其余部分等方面,我确实有点困惑。我需要能够可视化一些结构。在这种情况下,函数名是numberofrowspeagon,参数是section吗?

在这件事上给予帮助将不胜感激。


您可以通过查看

1
[object action:var withFoo:baz]

作为

1
object."action:withFoo:"(var, baz)

冒号前的所有内容都是方法名的一部分,冒号后的所有内容都是参数,因此方法名与传递给方法的参数交错。


是的,Objective-C将参数与方法名的某些部分混合的方式一开始看起来很奇怪。在这方面,每个人都经历了一个短暂的调整期。但是给它一点时间——过了一会儿,你可能再也不想看到一个用逗号分隔、用括号括起来的无名参数列表了。

在C++中,你会说:

1
Color *color = new Color(0.5, 0.7, 0.2, 0.8);

你知道这些价值观是什么意思吧?其中有四个参数,所以很明显参数是红、绿、蓝、α顺序。还是阿尔法,红色,绿色,蓝色?当然,它也可以是色调,饱和度,值,alpha…好吧,这并不重要,因为你可以随时查看它。

在目标C中,你说:

1
UIColor *color = [[UIColor alloc] initWithRed:0.5 green:0.7 blue:0.2 alpha:0.8];

那不是更好吗?您仍然需要不时地查阅文档,以准确地提醒自己一个方法做了什么,或者一个类提供了什么方法。但是,您不会经常发现自己只是为了找出哪个参数去哪里而咨询文档。


目标C有一种描述性的写作方法。

1
-(NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section{}

它是一个方法tableview,返回nsinteger,接受两个参数-一个uitableview引用和一个integer部分。现在考虑将numberofrowspeagon作为参数的描述。

1
-(NSInteger) calculateSum:(NSInteger)operand1 secondOperand:(NSInteger)operand2 andThirdOperand:(NSInteger)operand3{}

我可以把这些方法称为[自计算和:var1第二操作数:var2和hirdoperand:var3];

这里"secondoperand"和"andthirdoperand"不是必需的,我可以把上面的方法写成

1
-(NSInteger) calculateSum:(NSInteger)operand1 :(NSInteger)operand2 :(NSInteger)operand3{}

并将此方法称为

1
[self calculateSum:var1 :var2 :var3];

但是第一个很容易阅读,如果你告诉每个变量是什么,希望这有帮助。

另请看,我使用了单词method而不是通常的目标c方法的函数。


是的,基本上就是这样。在obj-c中,完整的方法名包括参数名。我相信这项公约起源于斯莫尔脱口秀。


(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

这是一个接受2个参数、一个UITableView和一个NSinteger的方法。它不是这样写的:-tableView:numberOfRowsInSection: