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

어떤 경우에는 콜론의 수는 인수의 수를 결정하지 않습니까? –

+0

target-action의 경우에는 알지만, 'performSelector'메서드 (인수를 사용하는 메서드가 아닌)가 문제가 될 수 있다고 생각합니다. 기껏해야 무제한 인수로 전달할 수 있습니다. – FeifanZ

관련 문제