Notas de estudio: addChildViewController

Study Notes Addchildviewcontroller

Hablando de eso, Apple proporcionó el método addChildViewController en iOS5, pero nunca lo he usado y no sé mucho al respecto. Tengo la oportunidad de usarlo y aprenderlo con detenimiento.

Definición de método

En swift, el método correspondiente es:



|_+_|

Explicación de Apple de este método:



Este método crea una relación padre-hijo entre el controlador de vista actual y el objeto en el parámetro childController. Esta relación es necesaria cuando se inserta la vista del controlador de vista secundario en el contenido del controlador de vista actual. Si el nuevo controlador de vista secundario ya es secundario de un controlador de vista de contenedor, se elimina de ese contenedor antes de agregarlo.
Este método solo está diseñado para ser llamado por una implementación de un controlador de vista de contenedor personalizado. Si anula este método, debe llamar a super en su implementación.

La idea general es:
Este método crea una relación padre-hijo entre el VC actual y el VC agregado. Al agregar una vista VC a la vista VC actual, primero debe agregar esta relación padre-hijo mediante el método addChild. Si el VC secundario ya tiene un VC principal, entonces llamar a este método primero eliminará el VC secundario del VC principal anterior y luego lo agregará al VC actual como VC secundario.
Este método solo se llamará en un VC personalizado. Si tiene la intención de anular este método, debe llamar a este método de super.



En otras palabras, la API de iOS5 de Apple agrega el método addChild (_ childController: UIViewController), y espera que cuando usemos addSubview, también llamemos al método addChild (vc) para agregar el viewController correspondiente a la subvista a la administración actual de ViewController.
Para las subvistas que no es necesario mostrar actualmente, agregue subViewController solo a través de addChild (_ childController: UIViewController) llame al método transitionFromViewController cuando sea necesario mostrarlo. Agréguelo al ViewController subyacente.
Los beneficios de hacer esto:

1. Sin duda, la lógica de la página es más distinta. La Vista correspondiente corresponde al ViewController correspondiente.
2. Cuando no se muestra una subvista, no se cargará, lo que reduce el uso de memoria.
3. Cuando la memoria está apretada, la Vista sin carga se liberará primero, optimizando el mecanismo de liberación de memoria del programa.

  • En iOS5, se han agregado los siguientes métodos al ViewController:
  • addChildViewController:
  • removeFromParentViewController
  • transiciónFromViewController: toViewController: duración: opciones: animaciones: finalización:
  • willMoveToParentViewController:
  • didMoveToParentViewController:
escenas a utilizar:

En nuestro desarrollo diario, a menudo es necesario cambiar entre diferentes páginas cambiando de pestaña. Si administra estas vistas en un controlador, el código parece estar demasiado acoplado y no coincide con el patrón MVC de Apple. Apple recomienda un controlador. Administrar una vista. Algunas personas sugieren que el método como [self.view addSubview: viewController.view] está controlado por otro controlador, pero esto creará un nuevo problema: la subView agregada directamente a la jerarquía de vistas del viewController no se pasará normalmente. Tales como: rotación, toque, etc., es una operación peligrosa contra el principio de diseño MVC desarrollado por CocoaTouch, viewController debe y solo debe administrar una jerarquía de vista. De manera similar, tenemos que considerar otro problema: la mayoría de estas subvistas no siempre estarán en la interfaz, sino que solo aparecerán en algunos casos, como la vista de aviso de falla de inicio de sesión, la vista de aviso de cargar el archivo adjunto con éxito y el aviso vista de la falla de la red. Esperar. Pero aunque estas opiniones son raras, a menudo las guardamos en la memoria.



Sobre el ciclo de vida del niño VC:

Cuando el childViewController no se agrega a ningún controlador de vista principal, si la vista del childViewController se agrega a otra vista, viewWillAppear y viewDidAppear se llamarán normalmente. Pero cuando se agrega childViewController a un controlador de vista principal, viewWillAppear y viewDidAppear se sincronizan con los eventos viewWillAppear y viewDidAppear del controlador de vista principal.

Así que llame a las siguientes preguntas para prestar atención:

Primero llame a addSubView, viewWillAppear y viewDidAppear se llamará una vez, luego addChildViewController, sincronizado con el evento del controlador de vista principal, es decir, cuando se llame a viewDidAppear del controlador de vista principal, se llamará nuevamente al método viewDidAppear del childViewController. Entonces, el método viewDidAppear se llama dos veces.

Primero llame a addChildViewController, el evento de childViewController se sincroniza con el controlador de vista principal. Cuando se llama a viewDidAppear del controlador de vista principal, se llamará una vez al método viewDidAppear de childViewController y luego la llamada a addSubView no activará viewWillAppear y viewDidAppear.