Penso che, nella maggior parte delle classi, se il valore restituito da [super init] è nullo e lo controlli, come raccomandato dalle pratiche standard, e quindi restituisci prematuramente se zero, in pratica la tua app non funzionerà correttamente. Se ci pensate, anche se che se (auto! = Nil) controllo è lì, per il corretto funzionamento della classe, il 99,99% del tempo che effettivamente fate bisogno di sé di essere non-zero. Supponiamo ora che, per qualsiasi motivo, [super init] abbia restituito zero, in pratica il tuo controllo contro zero sta sostanzialmente passando il dollaro al chiamante della tua classe, dove probabilmente fallirebbe comunque, dal momento che presumerà naturalmente che la chiamata fosse riuscito.
Fondamentalmente, quello che sto ottenendo è che il 99,99% delle volte, il if (self! = Zero) non ti compra nulla in termini di maggiore robustezza, dal momento che stai solo passando il dollaro al tuo invocatore. Per essere davvero in grado di gestirlo in modo efficace, in realtà dovresti mettere dei controlli nell'intera gerarchia chiamante. E anche in quel caso, l'unica cosa che ti comprerebbe è che la tua app fallirebbe in modo un po 'più pulito / robusto. Ma fallirebbe comunque.
Se una classe di biblioteca ha deciso arbitrariamente di restituire zero come risultato di un [superiniziale], sei comunque praticamente fottuto, e questo è più un'indicazione che lo scrittore della classe di biblioteca ha fatto un errore di implementazione.
Penso che questo sia più un suggerimento di codifica legacy, quando le app venivano eseguite in una memoria molto più limitata.
Ma per il codice di livello C, in genere verificherei comunque il valore di ritorno di malloc () rispetto a un puntatore NULL. Considerando che, per Objective-C, fino a quando non troverò prove contrarie, penso che in genere salterò i controlli if (self! = Zero). Perché la discrepanza?
Perché, a livello C e malloc, in alcuni casi è possibile recuperare parzialmente. Mentre penso in Objective-C, nel 99,99% dei casi, se [superiniziale] restituisce zero, in pratica sei fottuto, anche se provi a gestirlo. Potresti anche lasciare che l'app si blocchi e gestire le conseguenze.