- ¿Cuál es el comportamiento normal en Objective-C si llama un método en un objeto (puntero) que es nulo (quizás porque alguien olvidó inicializarlo)? ¿No debería generar algún tipo de error (falla de segmentación, excepción de puntero nulo ...)?
- Si se trata de un comportamiento normal, ¿hay alguna manera de cambiar este comportamiento (configurando el compilador) para que el programa genere algún tipo de error/excepción en el tiempo de ejecución?
Para que quede más claro de lo que estoy hablando, he aquí un ejemplo.Llamar a un método en un objeto no inicializado (puntero nulo)
Tener esta clase:
@interface Person : NSObject {
NSString *name;
}
@property (nonatomic, retain) NSString *name;
- (void)sayHi;
@end
con esta aplicación:
@implementation Person
@synthesize name;
- (void)dealloc {
[name release];
[super dealloc];
}
- (void)sayHi {
NSLog(@"Hello");
NSLog(@"My name is %@.", name);
}
@end
En algún lugar en el programa hago esto:
Person *person = nil;
//person = [[Person alloc] init]; // let's say I comment this line
person.name = @"Mike"; // shouldn't I get an error here?
[person sayHi]; // and here
[person release]; // and here
y no estoy al tanto de ninguna manera de cambiar este comportamiento. Es una parte fundamental de la programación con Objective-C/Cocoa. Aprenderás a amarlo. –
El enlace al documento en respuesta está muerto (* Página no encontrada *). – Pang