2012-11-21 7 views
4

이 구문의 유효성을 알지 못했습니다. 다음과 같이이라고Bizzare 메서드 서명, 명명되지 않은 인수 (obj-c)

+ (void) methodName:(TypeObject *)typeObject1:(TypeObject *)typeObject2; 

:

[object methodName:obj1:obj2]; 

가 나는 추하고 혼란 찾을 수 있지만, 빌드.

왜 이것이 유효한지 설명하는 참조 문서에서 나를 가리킬 수 있습니까?

FWIW 코드베이스 (상속받은 것)는 엉뚱한 게으른 물건들, 수십 개의 맞춤법 오류 및 다른 사람이 다시 읽지 않아도되는 것처럼 보이는 것처럼 보입니다. (다시 uncrustify 주셔서 감사합니다.)

답변

8

이것은, 사각형 클래스 대신 다음과 같이 를 호출 할 것이다 번째 매개 변수에 대한 레이블이있는 setOrigin:: 방법을 구현할 수있는 원칙에서는 well-kown and documented feature (pdf, p. 14)

입니다 :

[myRectangle setOrigin:30.0 :50.0]; // This is a bad example of multiple parameters

하지만 사과 discourage everbody of using parameter passing without keyword :

모든 인수 앞에 키워드를 사용하십시오.
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag; -> 오른쪽.
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag; -> 틀렸어.

왜 objective-C의 제작자가 허용했는지 나는 모른다. 어쩌면 스몰 토크의 유산과 관련이 있을지도 모릅니다.

+0

나는 회의를 놓쳤을 것 같은데, 나는 애플의 낙담이 전에는 나오지 않는다고 생각한다. – ocodo

+0

어쩌면 애플은 이름없는 매개 변수가 가장 강력한 기능 중 하나를 손상 시키므로 경고를 내기 위해 정적 분석기를 가르쳐야 할 것입니다. – vikingosegundo

+0

@vikingosegundo 링크 수정! – CrimsonChris