1

簡単な質問。以下のインターフェースの二重アスタリスクの意味は何ですか?NSErrorポインタではありませんが、何ですか?

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

3 に答える 3

7

これは、へのポインタへのポインタ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;
}
于 2012-02-12T00:21:45.210 に答える
1

NSError*次のように、への参照を送信して呼び出します。

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

この-checkResourceIsReachableAndReturnError:メソッドはmyError、新しいにスペースを割り当てるなど、ポインタを変更できますNSErrormyErrorこれにより、エラーがないかどうかを確認するだけで、エラーが発生したかどうかを簡単に確認できますNULL

于 2012-02-12T00:22:22.197 に答える
1

このブログ投稿「NSErrorを使用して大きな効果を上げる」を確認し、「ポインターをポインターに渡す」セクションに特に注意してください。

また、ポインタに関するwikiページには、「複数の間接参照」に関するセクションがあります。

于 2012-02-12T00:27:57.403 に答える