2012-02-12 6 views
1

간단한 질문. 아래 인터페이스에서 이중 별표의 의미는 무엇입니까? 그것은 NSError 포인터가 아니지만 무엇입니까?객관적인 C에서 **의 구문

- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error 

답변

7

포인터는 NSError에 대한 포인터입니다. 그것은 "out 매개 변수"로 사용되거나 NSObject 인스턴스가 항상 포인터임을 고려하여 NSError 인스턴스에 대한 포인터로 생각할 수 있습니다.

당신은 다음과 같이 사용 : 구현 측면에서

NSError * outError = nil; << reserve place and a name for the out parameter 

// pass the error so the client may return it to you: 
BOOL ret = [obj checkResourceIsReachableAndReturnError:&outError]; 

if (nil != outError) { << the error was set in checkResourceIsReachableAndReturnError: 
    NSLog(@"Error: %@", outError); << log it 
} 
… 

, 그것은 다음과 같습니다

- (BOOL)checkResourceIsReachableAndReturnError:(NSError**)outError 
{ 
    if (self.isThingReachable) { 
    // okay - the caller may not be interested in the error, test it: 
    if (0 != outError) { 
     // they are interested this time! 
     *outError = [NSError errorWithBlahBlahBlah]; 
    } 
    return NO; 
    } 

    return YES; 
} 
1

당신은과 같이, NSError*에 대한 참조를 전송하여 전화 :

NSError *myError = NULL; 
[foo checkResourceIsReachableAndReturnError:&myError]; 
if (myError) { 
    /* look through info, handle error, etc. */ 
} 

-checkResourceIsReachableAndReturnError: 메서드는 포인터를 수정할 수 있습니다 myError 새로운 NSError에 대한 공간 할당을 포함합니다. 이렇게하면 myErrorNULL이 아닌지 단순히 확인하여 오류가 있는지 쉽게 확인할 수 있습니다.