以下语法是什么意思? (objective-c风格方法调用)

时间:2012-02-26 08:24:53

标签: iphone objective-c ios cocoa ios5

我是Objective-c中的菜鸟(来自C#/ Java背景),并且难以理解以下使用Picker View控件中使用的objective-c语法(以及我们需要实现的其他方法)使用Picker View):

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row 
             forComponent:(NSInteger)component

为了理解,我尝试将其映射到以下语法,但似乎完全不同。

-(NSString *)MethodName: (UIPickerView *)FirstParam and:(NSInteger)SecondParam 
             and:(NSInteger)ThirdParam

有人可以分解这些部件并给出一些解释吗?

4 个答案:

答案 0 :(得分:7)

这是一个名为

的方法

pickerView:titleForRow:forComponent:

它返回一个指向NSString的指针,并且需要UIPickerView *,NSInteger和NSInteger类型的参数。

类似java的方法声明可能如下所示:

NSString pickerViewTitleForRowForComponent(UIPickerView pickerView, NSInteger row, NSInteger component)

答案 1 :(得分:5)

不同之处在于,在Objective-C中,方法名称由部分组成,而不是像java中的单个字符串。

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row ...
/*    ^           ^             ^            ^          ^            
      |           |             |            |          |            
  Return Type     |       Argument Type      | 2nd part of m. name     etc....
                  |                          |
         Part of method name           Argument Name
*/

答案 2 :(得分:2)

... erik aligner和bdares答案解释所有

还有一件事:

开头的“ - ”减号表示您可以使用类的实例调用此方法。 在这种情况下,该方法由pickerView本身调用(您不调用它,您只需在采用UIPickerViewDelegate协议的类中实现它/意味着它使用该协议所需的所有方法)

但是,通常,应该在实例上调用以减号开头的方法。 例如,方法

- (void)addSubview:(UIView *)view
在UIViewClass中声明的

应该这样调用:

[yourUIViewInstance addSubview:yourSubViewInstance];

虽然使用加号“+”符号声明的方法意味着您需要不在实例上调用它们(您可能根本没有分配任何实例),而是在类本身上调用

例如,对于UIView方法

+ (void)setAnimationDelay:(NSTimeInterval)delay

你应该这样称呼它:

[UIView setAnimationDelay:1.0];

答案 3 :(得分:1)

方法名称(选择器)是三个组件:pickerView:titleForRow:forComponent:。除此之外,你完全正确。 (是的,参数和选择器段在Objective-C中混合在一起。这是它的优势之一;它有助于长消息表达式的可读性。)