Questa linea:
[window addSubview:nav.view];
non aggiunge una vista sullo schermo immediatamente. Viene visualizzato dal sistema operativo in qualche ciclo di esecuzione futuro su un thread probabilmente diverso. L'effettiva implementazione di cui non possiamo essere sicuri.
Questo è il motivo per cui Apple definisce metodi delegati come viewDidAppear/viewWillAppear, altrimenti non avremmo bisogno di essi come sapremmo esattamente quando si verificano questi eventi.
Inoltre, aggiungendo una sottoview come hai detto, mantiene effettivamente la vista. Lo standard NON tuttavia conserva il controller di visualizzazione o il controller di navigazione. Dato che il controller di navigazione conserverà qualsiasi controller di vista aggiunto, non è necessario eseguirne il backup con un ivar.
Tuttavia, il riferimento al controller di navigazione deve rimanere oltre l'ambito del metodo. oppure, a seconda del codice, potrebbe essere deallocato o avere perso il riferimento.
Quindi è necessario mantenere un riferimento al controller di navigazione con un Ivar e impostarlo in questo modo:
self.navigationController = nav;
Così, anche se nav.view contiene un puntatore al testViewController.view, l'applicazione non ha alcun riferimento alla controller di navigazione e, per estensione, la vista. Il risultato è uno schermo vuoto.
per rendere questo più evidente che non è un trattenere/problema di rilascio, in realtà si sta che fuoriesce nel seguente metodo:
self.testViewController = [[TestViewController alloc] initWithNibName:@"TestView" bundle: [NSBundle mainBundle]];
È necessario autorelease per bilanciare le vostre mantenere/rilasci da:
self.testViewController = [[[TestViewController alloc] initWithNibName:@"TestView" bundle: [NSBundle mainBundle]] autorelease];
Quindi, questo significa che il punto di vista è mai, mai stato deallocato ogni volta che avete eseguito questo codice. Il che ci assicura ulteriormente che il tuo problema è davvero un riferimento perso.
La risposta contrassegnata non è corretta, per i motivi che ho commentato di seguito. –