これは既存の投稿、What's the Point of (NSError**)error?と似ていますが、私の質問は少し異なります。私はダブルポインタがどのように動作するのか、これが一般的なiOS APIエラーパターンであることを理解しています。私の質問は、単一のポインタの周りに多い、なぜこのコードは動作しません:NSError *対NSError **
- (BOOL)someMethodWithError:(NSError *)error
{
...
if(errorOccured)
{
NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
error = e;
return NO;
}
return YES;
}
は使用して実装:
NSError *error = nil;
if(![someObj someMethodWithError:error])
{
NSLog(@"Error: %@", [error localizedDescription]);
}
なぜメソッドの実装での割り当ては、ポインタを再割り当てしません。新しいNSErrorオブジェクト?
優秀な説明madmik。ありがとうございました。ポインタが値渡しであることが今や分かります。 – Eric
@ madmik3:ポインタを「単なる整数」と考えるのは危険です。ポインタはアドレスを含む変数です。 Cがポインタ上で '++'のような算術演算を使うことが許されているからといって、ポインタは整数のように振舞うわけではありません。たとえば、 '++'型の変数 'int'を使うと、その値に1を加えます。しかし、 '++'型の 'int *' *型の変数には、その値に4を加えたものになります。 – pje
私はそれらを同じものと考えることを示唆しているわけではありませんが、渡す変数にどのように反応するかを見ると、時にはダブルポインタが必要な理由が明らかになります。これは例のためのものです。 :) – madmik3