La mia app iOS si apre con un prompt di login. Una volta che l'utente si collega, passa alla vista principale.Riassegnazione di RootViewController dopo il login riuscito
Nell'applicazione: didFinishLaunchingWithOptions, ho impostato il RootViewController su LoginViewController. Il LoginViewController ha l'AppDelegate come suo delegato:
LoginViewController *login = [[LoginViewController alloc] init];
[login setDelegate:self];
[[self window] setRootViewController:login];
Se l'accesso riesce, il LoginViewController chiama il metodo userDidLogin del AppDelegate:
if([[self delegate] respondsToSelector:@selector(userDidLogin)]) {
[[self delegate] userDidLogin];
}
userDidLogin crea una nuova UINavigationController e lo assegna come RootViewController:
Aggiungendo un NSLog al metodo dealloc di LoginViewController, sembra che LoginViewControl in quel momento viene distrutto e l'esecuzione continua come previsto.
Non ho fatto nulla per chiudere in modo esplicito LoginViewController, basandomi solo sul presupposto che l'assegnazione di un nuovo RootViewController significherà che il vecchio scompare e viene riordinato via ARC.
Posso contare sul fatto che sia sempre il caso? È un approccio sensato?
Grazie in anticipo.
James
Nota a margine: se non si è sicuri di cosa e cosa non viene rilasciato da ARC, è possibile implementare il metodo dealloc e stampare qualcosa come NSLog (@ "L'istanza di MySuperDuperClass è stata deallocata da ARC"). – Groot
Grazie - L'ho già fatto. Questo è ciò che intendevo con "Aggiungendo un NSLog al metodo dealloc ...". La vista sembra chiudersi correttamente e sembra che sia sempre stata deallocata, ma mi chiedevo se posso sempre fare affidamento su quello. Sospetto che vada bene, ma sembra una supposizione che potrebbe andare storta ... – James