2012-02-12 10 views
1

簡単な質問です。下のインターフェースでダブルアスタリスクの意味は? NSErrorポインタではありませんが、何ですか?目的地Cの**の構文

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

答えて

7

NSErrorへのポインタへのポインタです。これは、 "outパラメータ"として使用されます。NSObjectのインスタンスが常にポインタであるとみなして、NSErrorインスタンスへのポインタと考えることができます。

あなたはこのようにそれを使用します。

- (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 * 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 
} 
… 

、それはこのようになります

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

-checkResourceIsReachableAndReturnError:メソッドは、ポインタを変更することができますmyError新しいNSErrorのためのスペースの割り当てを含みます。これにより、myErrorNULLでないかどうかを単にチェックすることで、エラーがあったかどうかを簡単に確認することができます。

1

"Using NSError To Great Effect"このブログ記事をチェックして、「ポインタをポインタに渡す」のセクションに特に注意してください。

また、ポインタのwikiページには、"Multiple Indirection"

に関するセクションがあります。
関連する問題