2013-02-06 2 views
-4

오늘 Carlo Chung은 "iOS 용 Pro Objective-C 디자인 패턴"을 읽었습니다. 는 그래서 어댑터 패턴에 대해 읽기 및 프로토콜에 선언이 방법 보았다의미 * 및 &

-(void) command: (SetStrokeColorCommand *) command 
     didRequestColorComponentsForRed: (CGFloat *) red 
            green: (CGFloat *) green 
            blue: (CGFloat *) blue; 

당신은 책 115 페이지에서 볼 수 있습니다. 이 방법보다 은

[delegate_ command:self didRequestColorComponentsForRed: &redValue 
                green: &greenValue 
                blue: &blueValue]; 

그리고 페이지에서이 방법의 다음 선언을 사용 (118)

-(void) command: (SetStrokeColorCommand *) command 
     didRequestColorComponentsForRed: (CGFloat *) red 
            green: (CGFloat *) green 
            blue: (CGFloat *) blue 
{ 
    *red = [redSlider_ value]; 
    *green = [greenSlider_ value]; 
    *blue = [blueSlider_ value]; 
} 

무엇을 의미 * 선언 (* 레드 * 그린 * 블루) 어떤에서 & (& redValue을 의미 ...)? 코드에서 & 오류 만있는 &을 보았습니다.

+11

C 또는 C++의 포인터에 대한 자료를 읽으십시오. – CRDave

+0

음 ... '포인터'? – sgarizvi

+3

&는 주소 연산자입니다. * 변수를 포인터로 선언하거나 이미 선언 된 변수를 참조 해제합니다. http://www.cplusplus.com/doc/tutorial/pointers/ –

답변

6

*은 포인터 선언자 또는 참조 취소 연산자입니다. 선언에서 *는 포인터 변수를 나타냅니다.

&은 주소 연산자입니다.

사이드 참고 :

당신은 더 진보 된 책을 시도하기 전에 언어의 기초를 배워야한다.

2

어떤 사람들은 지적했듯이, 이것들은 포인터와 관련이 있습니다. 그러나 이것에 대한 정보가 풍부합니다. 새로운 것이라면 조금 혼란 스러울 수도 있습니다.

당신이 알아야 할 지적 ... 당신이 입력과 함수의 출력이 대부분의 시간

.

- (int)roundMyFloat:(float)float; 

여기서 입력은 float이고 출력은 int입니다.

경우에 따라 메소드에 둘 이상의 출력이 필요할 수 있습니다. 일반적인 상황은 success 매개 변수와 함께 오류 코드를 반환하려는 경우입니다.

- (BOOL)doSomthing:(NSError**)error; 

당신과 같이이를 사용합니다 ...

NSError* error = nil; 
BOOL sucess = [myInstance doSomething:&error]; 
if (!sucess) 
{ 
    NSLog(@"Error: %@", error); 
} 

당신은 '출력 있었던 파라미터'으로의 error을 전달하고 있습니다. doSomthing 코드는 오류가 발생하고 필요한 경우 정보를 입력합니다.

오류 선언을 (NSError**)에 두 개의 *이있는 오류 매개 변수로 선언해야합니다. 오류 개체에 대한 포인터를 지정하고 오류 개체는 실제로 포인터 자체이므로 포인터에 대한 포인터입니다. .

[myInstance doSomething:&error]; 메서드에 오류를 전달하면 & 기호를 사용하여 '내 오류 개체의 메모리 주소 가져 오기'를 말합니다.

예제에서 redgreenblue은 출력 매개 변수입니다. didRequestColorComponentsForRed 메서드는 전달한 값을 변경합니다.NSError 예와 달리 redgreenblue은 개체가 아니므로 메서드 선언에 별표 하나만 있으면됩니다. 이것은 'CGFloat 값에 대한 포인터를 매개 변수로 받아들입니다'라고 말합니다.

didRequestColorComponentsForRed 메서드를 호출하면 NSError 예제와 마찬가지로 & 기호를 사용하여 색상 구성 요소를 전달합니다. 이것은 내 CGFloat 값의 메모리 주소를 가져 와서 함수에 전달한다고 말합니다.

지금은 &* 구문에 대해 걱정하지 마십시오. 무엇을 위해 (출력 매개 변수)를 기억하고 있는지 확인하십시오. 당신은 결국 그것에 대해 그것을 읽어야한다 (실제로 매우 차갑다!).

희망은 도움이됩니다. 질문을 두려워하지 마십시오.