- Qual è il comportamento normale in Objective-C, se si chiama un metodo su un oggetto (puntatore), che è pari a zero (forse perché qualcuno ha dimenticato di inizializzare)? Non dovrebbe generare qualche tipo di errore (errore di segmentazione, eccezione puntatore nullo ...)?
- Se si tratta di un comportamento normale, esiste un modo per modificare questo comportamento (configurando il compilatore) in modo che il programma sollevi qualche tipo di errore/eccezione durante il runtime?
Per rendere più chiaro di cosa sto parlando, ecco un esempio.Chiamare un metodo su un oggetto non inizializzato (puntatore nullo)
Avere questa classe:
@interface Person : NSObject {
NSString *name;
}
@property (nonatomic, retain) NSString *name;
- (void)sayHi;
@end
con questa implementazione:
@implementation Person
@synthesize name;
- (void)dealloc {
[name release];
[super dealloc];
}
- (void)sayHi {
NSLog(@"Hello");
NSLog(@"My name is %@.", name);
}
@end
Da qualche parte nel programma faccio questo:
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
e io non sono a conoscenza di alcun modo per cambiare questo comportamento. È una parte fondamentale della programmazione con Objective-C/Cocoa. Imparerai ad amarlo. –
Il collegamento al documento in risposta è morto (* Pagina non trovata *). – Pang