ios - Metodo UIViewController-dealloc non chiamato



objective-c automatic-ref-counting (3)

Il metodo dealloc non viene chiamato quando la classe viene mantenuta (o qualcosa in questa classe viene mantenuta) e non rilasciata nuovamente. È giusto per progetti sia con ARC che senza di esso. Quindi controlla il tuo codice due volte.

https://ffff65535.com

Sto lavorando con il conteggio dei riferimenti automatico. Ho una sottoclasse UIViewController personalizzata e ogniqualvolta chiami -presentViewController: animated:completion: o rimuovi la sua vista dalla superview Desidero NSLog qualcosa come "I am dealloced" so che il controller della vista è stato rimosso con successo. Ho implementato il metodo -dealloc nel mio controller di visualizzazione. Tuttavia, ho avviato un progetto di test in cui avevo appena due istanze di UIViewController (nessun ciclo di conservazione) e -dealloc non viene chiamato neanche quando spingo il secondo UIViewController modale o quando rimuovo il superview o quando lo rimuovo dal controller di visualizzazione padre. Mi sto perdendo qualcosa ? Nel mio progetto originale (non nel caso di test) Instruments mi mostra che quei controller lasciano un'impronta di memoria che non riesco a eliminare.


Per ottenere una stampa quando Deal Controller è deallocato, è possibile implementare il metodo dealloc come

- (void) dealloc {
    NSLog(@"The instance of MyViewController was deallocated");
}

Quindi per ottenere una stampa quando il View Controller ha lasciato la vista che è possibile implementare

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"The instance of MyViewController left the main view")
}

Se si utilizza -presentViewController:animated:completion: si mantiene il parentViewController ogni volta che si chiama questo metodo. ModalViewControllers viene semplicemente inserito sopra l'altro ViewController.

ModalViewControllers sono progettati solo per alcuni tipi di informazioni / input utente e cose del genere. Se vuoi deallocare il controllore ParentView devi gestire la tua implementazione.





dealloc