Chiarimento come un follow-up a:Follow-up viewDidUnload vs. dealloc domanda
What exactly must I do in viewDidUnload? When should I release objects in -(void)viewDidUnload rather than in -dealloc?
Quindi diciamo che c'è un errore di memoria insufficiente, e la vista è nascosto, e viewDidUnload si chiama. Facciamo il rilascio e nil balliamo. In seguito non è necessario l'intero stack di visualizzazione, quindi viene chiamato dealloc. Dal momento che ho già il rilascio e roba nil in viewDidUnload, non ce l'ho in dealloc. Perfezionare.
Ma se non c'è un errore di memoria insufficiente, viewDidUnload non viene mai chiamato. viene chiamato dealloc e dal momento che non ho il rilascio e la roba nil, c'è una perdita di memoria.
In altre parole, dealloc sarà mai chiamato senza viewDidUnload chiamato prima?
E il seguito pratico di ciò è che se alloco e imposta qualcosa in viewDidLoad, e lo rilascio e impostato su nil in viewDidUnload, lo lascio fuori da dealloc, oppure eseguo un controllo difensivo nullo in dealloc e rilascia/zero se non è zero?
Sai che puoi inviare a nil un messaggio di rilascio senza problemi, giusto? nil semplicemente ignora tutti i messaggi inviati e restituisce nil come valore senza errori. Nessuna necessità di controlli difensivi per nil come con NULL –