Lo sto facendo religiosamente da un paio di anni. Controllo per la validità del self
dopo aver chiamato [super init...]
metodi:Perché controlliamo tutti se (autonomamente) nei metodi init?
self = [super init];
if (self != nil) {
// initialize
}
return self;
Si può fare questo in una varietà di modi, come this question riassume bene, ma questa domanda è sulla sintassi, il mio è il concetto.
Recentemente ho ricevuto una domanda da un collega che sta imparando Objective-C e mi ha chiesto "perché dovrei provare per l'esistenza di me stesso, non è ovvio che sia lì?" e la mia risposta breve era "err, sì, beh, ci sono casi in cui può fallire, ecco perché." Ma la risposta lunga è che davvero non mi capisco perché ci proviamo dappertutto, quando le istanze in cui potrebbe fallire sono molto rare. Apple's reference guide ci parla di alcuni casi specifici, come quando si inizializza con i file o quando si tratta di singleton. Ma suona come eccezioni molto rare alla regola che [super init]
dovrebbe funzionare.
Quindi la mia domanda per voi è questa: Perché testiamo sempre la validità di sé? Stiamo semplicemente implementandolo ovunque per catturare quell'unica eccezione dove si verifica? Perché non saltare l'intera cosa if (self)
e inizializzare il nostro oggetto se le probabilità di successo sono al 100% (o non è mai così)?
P.S. Mi rendo conto che questa domanda deve essere duplice poiché è così semplice, ma le mie query di ricerca hanno ricevuto molte altre domande sulla sintassi dell'inizializzazione. I collegamenti duplicati sono apprezzati, evviva!
possibile duplicato di [In Objective-C perché dovrei controllare se self = \ [super init \] non è nullo?] (Http://stackoverflow.com/questions/1287950/in-objective-c-why- should-i-check-if-self-super-init-is-not-nil) – JeremyP