Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 下面的语法是什么意思?(objective-c风格的方法调用)_Iphone_Objective C_Ios_Cocoa_Ios5 - Fatal编程技术网

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

Iphone 下面的语法是什么意思?(objective-c风格的方法调用),iphone,objective-c,ios,cocoa,ios5,Iphone,Objective C,Ios,Cocoa,Ios5,我是objective-c的noob(来自c#/Java背景),很难理解下面的objective-c语法,它用于选取器视图控件(以及使用选取器视图需要实现的其他方法): 为了理解,我尝试将其映射到以下语法,但似乎完全不同 -(NSString *)MethodName: (UIPickerView *)FirstParam and:(NSInteger)SecondParam and:(NSInteger)ThirdParam 有人能把这些部件分解一下并解释一下吗?

我是objective-c的noob(来自c#/Java背景),很难理解下面的objective-c语法,它用于
选取器视图
控件(以及使用
选取器视图
需要实现的其他方法):

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

-(NSString *)MethodName: (UIPickerView *)FirstParam and:(NSInteger)SecondParam 
             and:(NSInteger)ThirdParam
有人能把这些部件分解一下并解释一下吗?

这是一个名为

pickerView:titleForRow:forComponent:

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

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


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

不同之处在于,在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
*/

…erik aligner和bdares的答案解释了一切

还有一件事:

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

但是,一般来说,应该在实例上调用以减号开头的方法。 例如,方法

- (void)addSubview:(UIView *)view
在UIViewClass中声明,应按以下方式调用:

[yourUIViewInstance addSubview:yourSubViewInstance];
[UIView setAnimationDelay:1.0];
而用加号“+”声明的方法意味着您不需要在实例上调用它们(您可能根本没有分配任何实例),而需要在类本身上调用它们

例如,对于UIView方法

+ (void)setAnimationDelay:(NSTimeInterval)delay
你应该这样称呼它:

[yourUIViewInstance addSubview:yourSubViewInstance];
[UIView setAnimationDelay:1.0];