簡単な質問です。下のインターフェースでダブルアスタリスクの意味は? NSErrorポインタではありませんが、何ですか?目的地Cの**の構文
- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
簡単な質問です。下のインターフェースでダブルアスタリスクの意味は? NSErrorポインタではありませんが、何ですか?目的地Cの**の構文
- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
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;
}
あなたがそうのように、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
のためのスペースの割り当てを含みます。これにより、myError
がNULL
でないかどうかを単にチェックすることで、エラーがあったかどうかを簡単に確認することができます。
"Using NSError To Great Effect"このブログ記事をチェックして、「ポインタをポインタに渡す」のセクションに特に注意してください。
また、ポインタのwikiページには、"Multiple Indirection"
に関するセクションがあります。