簡単な質問。以下のインターフェースの二重アスタリスクの意味は何ですか?NSErrorポインタではありませんが、何ですか?
- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
簡単な質問。以下のインターフェースの二重アスタリスクの意味は何ですか?NSErrorポインタではありませんが、何ですか?
- (BOOL)checkResourceIsReachableAndReturnError:(NSError **)error
これは、へのポインタへのポインタNSError
です。これは「出力パラメータ」として使用されます。または、インスタンスが常にポインタNSError
であると考えると、インスタンスへのポインタと見なすことができます。NSObject
次のように使用します。
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;
}
NSError*
次のように、への参照を送信して呼び出します。
NSError *myError = NULL;
[foo checkResourceIsReachableAndReturnError:&myError];
if (myError) {
/* look through info, handle error, etc. */
}
この-checkResourceIsReachableAndReturnError:
メソッドはmyError
、新しいにスペースを割り当てるなど、ポインタを変更できますNSError
。myError
これにより、エラーがないかどうかを確認するだけで、エラーが発生したかどうかを簡単に確認できますNULL
。
このブログ投稿「NSErrorを使用して大きな効果を上げる」を確認し、「ポインターをポインターに渡す」セクションに特に注意してください。
また、ポインタに関するwikiページには、「複数の間接参照」に関するセクションがあります。