Me doy cuenta de que esto es similar a una publicación existente aquí, What's the Point of (NSError**)error?, pero mi pregunta es un poco diferente. Entiendo cómo funciona el puntero doble, y cómo este es el patrón de error API común de iOS. Mi pregunta es más sencillo alrededor del puntero, y por qué este código no funciona:NSError * vs NSError **
- (BOOL)someMethodWithError:(NSError *)error
{
...
if(errorOccured)
{
NSError *e = [[[NSError alloc] initWithDomain:@"" code:1 userInfo:nil] autorelease];
error = e;
return NO;
}
return YES;
}
implementarse usando:
NSError *error = nil;
if(![someObj someMethodWithError:error])
{
NSLog(@"Error: %@", [error localizedDescription]);
}
¿Por qué la asignación en la implementación del método reasignar el puntero a la nuevo objeto NSError?
Excelente explicación madmik. Gracias. Tiene sentido totalmente ahora que se da cuenta de que el puntero pasa por valor. – Eric
@ madmik3: Puede ser peligroso pensar en un puntero como "solo un número entero".Un puntero es una variable que contiene una dirección. El hecho de que C le permita utilizar operaciones aritméticas como '++' en los punteros no significa que los punteros se comporten como enteros. Por ejemplo, si '++' una variable de tipo 'int', habrá agregado 1 a su valor. Sin embargo, si '++' una variable de tipo 'int *' *, habrá agregado 4 a su valor *. – pje
No sugiero que los considere de la misma manera, pero si observa cómo responden a las variables que pasan, queda claro por qué a veces necesita un doble puntero. Es solo por el ejemplo. :) – madmik3