Sobes.tech
Middle

¿Se crea una instancia de la vista inmediatamente después de crear el controlador?

sobes.tech AI

Respuesta de la IA

No. La instancia de vista (view) para un controlador de tipo UIViewController se crea de manera perezosa, en la primera vez que se accede a la propiedad view.

UIKit no crea la vista inmediatamente después de inicializar el controlador para optimizar recursos. La vista puede ser visualmente compleja y requerir mucha memoria y tiempo de CPU para crearla. Creándola de manera "perezosa", solo cuando realmente es necesaria para mostrarla en pantalla, el sistema ahorra recursos.

Este proceso ocurre, por ejemplo, cuando el controlador se añade a la jerarquía de vistas de otro controlador o ventana, o cuando se llama explícitamente a su propiedad view. Si el controlador está inicializado, pero nunca se muestra ni se usa, su vista no será creada.

El ciclo de vida del controlador y la creación de la vista incluyen los siguientes puntos clave:

  1. init(coder:) o init(nibName:bundle:): El controlador se inicializa, pero view aún es nil.
  2. Primera vez que se accede a view: Si view es nil, el sistema llama al método loadView().
  3. loadView(): En este método (o el sistema por defecto) creas la vista raíz del controlador y la asignas a la propiedad view.
  4. viewDidLoad(): Este método se llama después de que la vista ha sido cargada y asignada a la propiedad view. Aquí generalmente se realiza la configuración de sub-vistas, carga de datos y otras acciones que dependen de la existencia de la vista.

Ejemplo de sobrescribir loadView():

override func loadView() {
    // En lugar de cargar desde Storyboard/XIB o crear un UIView vacío
    // creamos nuestra vista personalizada
    let customView = CustomContentView()
    view = customView
    // Aquí view ya no es nil
}

Es importante recordar que, en la mayoría de los casos, no sobrescribirás loadView() directamente, sino que confiarás en la implementación estándar de UIKit, que carga la vista desde un Storyboard, un archivo XIB o crea un UIView vacío por defecto. Sin embargo, entender cuándo y cómo se crea la vista es fundamental.