Una delle cose che trovo più complesse nello sviluppo in Objective-C è la gestione della memoria. Per quanto la si studi e per quanto se ne legga ci si trova sempre in situazioni in cui non si capisce bene come funzioni.
Una regola che a mio avviso non è così ben documentata è la seguente: gli oggetti definiti nel file di include mediante la direttiva IBOutlet e quindi collegati in Interface Builder ai rispettivi elementi della UI vanno rilasciati in modo esplicito con una release nel messaggio di dealloc.
Nei file generati in modo automatico da XCode ciò avviene per esempio per la UIWindow e per il View Controller. Ma in quanto generati in automatici spesso non ci si fa troppa attenzione.
Quindi il fatto di utilizzare l’Interface Builder ci evita di dover allocare ed inizializzare da codice l’oggetto ma non di rilasciarlo quando non più necessario.
Come sempre comunque il migliore amico dello sviluppatore iPhone/iPad è Instruments con la possibilità di rilevazione dei leaks che esso offre. Ogni applicazione dovrebbe essere analizzata a fondo con Instruments con l’obiettivo di eliminare ogni leak (ovviamente se causato dal nostro codice e non presente nei vari framework).