2009-07-01 3 views

답변

29

당신은 같은 선언을 작성할 수 있습니다

- (void) drawRoundedRect:(NSRect)aRect inView:(NSView *)aView withColor:(NSColor *)color fill:(BOOL)fill 

후속 호출 (4 개 매개 변수)를 같이 수 : rect는 이전에 NSRect 정의입니다

[self drawRoundedRect:rect inView:self withColor:[NSColor greenColor] fill:YES]; 

, self는 NSView의입니다 이 메소드는에서 호출되며 NSColor 중첩 된 메소드 호출에서 가져온 객체와 상수 부울 값 YES이 있습니다.

+0

이것은 여러 가지 방법입니다. – Devoted

+1

아니요. 호출은 []의 단일 세트로 묶여 있으므로 단일 메소드 여야합니다. 4 개의 매개 변수를 가진 단일 메서드입니다. –

2

Jeff는 방법이 어떻게 생겼는지 정확하게 설명했습니다. 모두가 하나의 메소드 이름을 형성하기 위해 함께 가입

void drawRoundedRect_inView_withColor_fill(MyObject* self, SEL _cmd, NSRect aRect, NSView* aView, NSColor* color, BOOL fill); 

매개 변수 "이름", 2 개 개의 숨겨진 매개 변수, 자신과 _cmd : 당신이 C 함수로 어떻게 보일지보고 싶다면, 그것은 같이 보일 것이다 앞에 추가됩니다.

14

Objective-C에서 메서드 이름은 적절하게 "선택기"라고하며 하나 이상의 파트로 구성 될 수 있습니다.

+ (NSColor*) colorWithDeviceRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 

이 경우 :

selectorFragmentName:(ParameterType)parameterName 

예를 들어, 당신은 NSColor에서이 같은 메소드 선언을 표시됩니다 방법은 하나 개 이상의 매개 변수를 허용하는 경우, 선택의 각 부분의 형식은 메서드 (selector)의 이름은 입니다. colorWithDeviceRed : green : blue : alpha : - 나머지는 스코프 (예 : 메소드의 경우 +, 클래스의 경우 +), 반환 유형 (여기 NSColor *), 각 유형 및 이름 매개 변수.

위험! 대부분의 다른 언어와 달리 Objective-C에서 메서드를 오버로드 할 수 없습니다. 즉, 동일한 선택기를 사용하지만 매개 변수의 수 및/또는 형식 순서가 다른 두 개의 메서드를 사용할 수 없습니다. 예를 들어,이 두 가지 방법을 사용할 수 없습니다 : 모두를위한 선택 이름 initWithObjects입니다

- (id) initWithObjects:(NSArray*)anArray; 
- (id) initWithObjects:(NSSet*)aSet; 

이후 : 오브젝티브 C는 두 가지를 구분하지 않습니다. 선택기 이름은 매우 빠른 조회를 위해 고유 한 정수로 변환되므로 동적 런타임에서는 유익하지만 메소드 오버로드가 예상되는 사용자에 대해서는 축소됩니다. Java와 같은 언어로 오버로드하는 가장 일반적인 경우는 생성자입니다. alloc/init 패턴 때문에 Objective-C에서는 문제가되지 않습니다. 다른 방법의 경우 고유 한 이름을 선택하면 문제가 발생하지 않습니다.스타일 관점에서

, 매개 변수가 방법의 선택에 산재되어 있기 때문에, 목표 - C 프로그래머 (와 엑스 코드) 자주 선언/정의를 모두 읽을 수 있도록 콜론에서 긴 선택기의 부분을 정렬합니다

+ (NSColor*) colorWithDeviceRed:(CGFloat)red 
          green:(CGFloat)green 
          blue:(CGFloat)blue 
          alpha:(CGFloat)alpha; 

및 호출 :

NSColor* myColor = [NSColor colorWithDeviceRed:0.5 
             green:0.6 
              blue:0.7 
             alpha:0.9]; 

공백 컴파일러 무관하다. 읽고 사용하기가 더 쉬워지면 확실히 사용하십시오.

+0

JAVA와 비교해도 object-c 개념에 대한 설명은 정말 이해하기 쉽습니다. 그레이트 포스트! – wao813

관련 문제