So che a partire con iOS5 e dei nuovi metodi di contenimento UIViewController, si suppone di chiamare questi metodi insieme addChildViewController:, removeFromParentViewController: e il metodo di transizione. Conosco anche l'ordine corretto di chiamarli nei tre scenari. Quello che non so è esattamente cosa fanno questi metodi?Che cosa esattamente willMoveToParentViewController: e didMoveToParentViewController: do?
Se questi erano solo punti di sostituzione per sottoclassi di UIViewController, suppongo che non saremmo obbligati a chiamare super in caso di override. Cosa può/andrà storto se non chiamo willMoveToParentViewController: nil prima di rimuovere un controller di visualizzazione o didMoveToParentViewController: self?
Sì, lo so, 'aggiungi' e 'rimuovi' chiama un metodo automaticamente (willMove ... e didMove ... rispettivamente) e richiede di chiamare l'altro manualmente. Penso di non avere problemi con la comprensione di cosa "aggiungi" e "rimuovi": sembra piuttosto complicato. Mi sento un po 'confuso su ciò che in realtà fanno la' volontà 'e' fatto '. – konrad
'will' e' didè' non hanno un'implementazione particolare, li chiami sul controller figlio, e se non lo fai, non vengono semplicemente chiamati ... il che potrebbe essere un problema se il bambino il controller li ha implementati e si è basato su di essi. Nella mia risposta li ho erroneamente definiti "metodi delegati", ma questo è quasi quello che sono, funzionano come metodi delegati opzionali e il bambino potrebbe usarli per eseguire alcune operazioni di configurazione o pulizia. Qualunque sottoclasse di UIViewController potrebbe sovrascriverli, e se si implementa un controller contenitore, si suppone che si debba rispettare questo comportamento e chiamarli. – Guillaume
Per essere chiari, 'willMoveToParentViewController di UIViewController:' e 'didMoveToParentViewController:' non fanno nulla. Tuttavia, qualsiasi sottoclasse consente loro di essere sovrascritti, quindi se non li chiami, non interromperesti un UIViewController, ma interromperesti le sottoclassi che si basano su di esso (ad esempio: una sottoclasse vuole rilasciare un oggetto quando viene rimosso da un controller di visualizzazione padre, se non si chiama il metodo, quindi non rilascerà mai l'oggetto). – Guillaume