2011-09-05 24 views
4

我想知道:使用冒号编写选择器名称与无冒号@selector(mySelector)@selector(mySelector:)有什么区别?使用冒号:或不使用选择器

如:

UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWith... 
                 target:self 
                 action:@selector(addAction:)]; 

我无法找到另一个例子没有冒号,但我敢肯定我已经看到了其中的一些。

+2

冒号意味着有一个参数,没有冒号意味着这段作品后面没有参数。 –

+1

[Objective-C performSelector - 何时使用冒号]的可能重复(http://stackoverflow.com/questions/1546372/objective-c-performselector-when-to-use-colon); [何时使用冒号与选择器](http://stackoverflow.com/questions/4953623/when-to-use-a-colon-with-a-selector) –

+0

好的谢谢你的回答 – Paul

回答

12

该方法的名称后需要冒号当且仅当该方法接受参数。

无功能参数:

-(void)addAction {} 

// Use [email protected](addAction)... 

有参数:

-(void)addAction:(id)info {} 

// Use [email protected](addAction:)... 
1

在某些情况下,冒号的数量可以判断参数。例如,如果您使用一个冒号传入操作方法,它将发送sender作为第一个参数。如果你通过一个带有两个冒号的选择器,你也会得到event。显然,没有冒号意味着没有参数。

+0

在哪些情况下冒号的数量并不决定参数的数量? – 2011-09-05 16:28:07

+0

我知道它在目标动作的情况下,但我认为简单的'performSelector'方法(不是那些需要参数的方法)可能有问题 - 最多它会传递nil参数。 – FeifanZ