目标C中的方法语法

时间:2009-03-25 20:01:24

标签: objective-c syntax methods

有人可以为我解释这种方法声明语法吗?在此函数中,返回UIPickerView(iPhone上的老虎机UI)的行数。根据我的理解,该方法称为“pickerView”,并返回一个NSInteger。

它传入一个指向UIPickerview的指针,名为“pickerView”...首先,为什么该方法与参数名称相同?

接下来有一个名为component的NSInteger参数告诉我们计算行的哪个组件。决定哪个是在方法体内的逻辑。

什么是'numberOfRowsInComponent?它似乎描述了我们返回的值,但它位于参数的中间。

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component
{
    if (component == kStateComponent)
        return [self.states count];

    return[self.zips count];
}

4 个答案:

答案 0 :(得分:356)

Objective-C方法旨在自我记录,并借鉴了Smalltalk的丰富传统。

我会尝试解释一下这里有什么,-(NSInteger) pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component

  • - (NSInteger)
    第一部分表明这是一个返回NSInteger对象的Objective C 实例方法。 -(短划线)表示这是实例方法,其中+表示这是方法。括号中的第一个值是方法的返回类型。

  • pickerView:
    此部分是消息名称的一部分。在这种情况下,完整邮件名称pickerView:numberOfRowsInComponent:。 Objective-C运行时获取此方法信息并将其发送到指示的接收器。在纯C中,这看起来像是 NSInteger pickerView(UIPickerView* pickerView, NSInteger component)。但是,由于这是Objective-C,因此其他信息将打包到消息名称中。

  • (UIPickerView*)pickerView
    此部分是输入的一部分。此处的输入类型为UIPickerView*,其局部变量名称为pickerView。

  • numberOfRowsInComponent:
    此部分是消息名称的第二部分。正如您在此处所看到的,消息名称被拆分以帮助指示您传递给接收器的信息。因此,如果我用变量foo和bar向对象myObject发送消息,我会输入:
    [myObject pickerView:foo numberOfRowsInComponent:bar];
    与C ++风格相反:
    myObject.pickerView(foo, bar);

  • (NSInteger)component
    这是输入的最后一部分。此处的输入的类型为NSInteger,其局部变量名称为component。

答案 1 :(得分:52)

在Objective-C中,方法的名称由声明中不是参数和类型的所有部分组成。因此,此方法的名称为:

pickerView:numberOfRowsInComponent:

该方法等同于C风格的函数,如下所示:

编辑:(感谢Jarret Hardie):

NSInteger pickerViewNumberOfRowsInComponent(UIPickerView * pickerView, NSInteger component)

答案 2 :(得分:28)

除了之前的答案之外,我还想说Objective-C方法(或者如果你愿意的话还有消息)有外部内部参数名称。< / p>

所以在这种情况下:

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component

numberOfRowsInComponent外部名称,是从外部调用此方法时使用的名称。

component是参数的内部名称,用于从方法内部引用参数。

希望能稍微清理一下。

答案 3 :(得分:21)

在我看来,Objective-C方法签名更像是句子。每个参数都值得方法名称的一部分。例如,在C中我们可以有一个方法( setPersonData )来设置一些关于人的信息:

void setPersonData( char* name, int age, float height ) {

在Objective-C中,该方法更具描述性( setPersonName:andAge:andHeight:),如

- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {