2011-09-05 41 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