Ho un codice molto semplice per mostrare un controller modale (nextController è un membro della classe):Utilizzando dismissModalViewControllerAnimated non libererà la memoria
nextController = [[InstructionsScreen alloc] initWithNibName:@"InstructionsScreen" bundle:nil];
[self presentModalViewController:nextController animated:YES];
[nextController release];
E poi, quando il controllore deve nascondere:
[self dismissModalViewControllerAnimated:YES];
nextController = nil;
Tutto funziona come previsto, ma quando eseguo lo strumento Allocazione oggetti mostra che dopo aver chiuso il controller modale la memoria allocata non viene liberata. Questo diventa un problema perché quando mostro diversi controller la memoria è finita ...
Qualcuno può darmi qualche indizio? Clang non vede alcun problema, quindi sono bloccato a raggiungere il limite di memoria, perché la memoria dei controller dismessi non verrà rilasciata.
EDIT: Quello che ho scoperto fino ad ora è che sembra essere una perdita da qualche parte nelle cose di Apple. Modo di riprodurre: XCode -> crea un nuovo progetto con il modello "Applicazione di utilità". Non scrivere alcun codice tu stesso. Basta creare una nuova applicazione di utilità ed eseguirla con "Allocazione oggetto", scegliere di vedere "Creato & Ancora in vita". Ora capovolgi il controller modale alcune volte - vedrai che la memoria allocata cresce e cresce ogni volta che appare il controller modale e anche quando scompare ...
Come ho detto nextController è un membro, non una proprietà: @interface MainScreenViewController: UIViewController { id nextController; } utilizzando "release" invece di assegnare nextController a "nil" porta a un'eccezione: messaggio viewDidDisappear: inviato all'oggetto liberato. L'oggetto sembra essere liberato, tuttavia lo strumento di assegnazione degli oggetti "creato e ancora vivo", mostra solo un crescente e crescente utilizzo della memoria. –