Middle
Fale-me sobre o ciclo de vida do controlador Vue.
sobes.tech IA
Resposta da IA
O ciclo de vida de um controlador de vista (UIViewController) no iOS representa uma sequência de eventos que ocorrem desde a sua criação até à sua destruição. As principais etapas:
- Inicialização:
init?(coder aDecoder: NSCoder): Inicialização a partir do Storyboard/Nib.init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Inicialização a partir de um arquivo Nib ou programaticamente sem Nib.loadView(): Carregamento ou criação da vista raiz do controlador. Se usar Storyboard/Nib, é chamado automaticamente. Para criação programática, deve ser sobrescrito.
- Carregamento da vista:
viewDidLoad(): É chamado após a vista do controlador ser carregada na memória. Adequado para configurações de inicialização que não requerem acesso às geometria.
- Aparição da vista:
viewWillAppear(_ animated: Bool): É chamado pouco antes da vista do controlador se tornar visível. Adequado para atualizar dados que podem mudar entre aparições.viewDidAppear(_ animated: Bool): É chamado após a vista do controlador se tornar visível. Adequado para iniciar animações ou outras tarefas que só devem ser executadas após a visualização completa.
- Desaparecimento da vista:
viewWillDisappear(_ animated: Bool): É chamado pouco antes da vista do controlador deixar de ser visível. Adequado para guardar estado ou parar atividades.viewDidDisappear(_ animated: Bool): É chamado após a vista do controlador deixar de ser visível. Adequado para libertar recursos ou parar processos que não são necessários em segundo plano.
- Alterações no layout:
viewWillLayoutSubviews(): É chamado antes das vistas do controlador mudarem de tamanho.viewDidLayoutSubviews(): É chamado após as vistas do controlador terem mudado de tamanho. Adequado para ajustar tamanhos e posições finais.
- Alterações na coleção de traços (Trait CollectionDidChange):
traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): É chamado quando as características do ambiente mudam, como o tamanho da classe, densidade de ecrã, modo claro/escuro, etc.
- Libertação de memória (Desinicialização):
deinit: É chamado pouco antes de libertar o objeto do controlador da memória. Usado para limpar recursos, cancelar notificações, etc.
Pontos importantes:
- Os métodos
loadView,viewDidLoad,viewDidAppear,viewWillDisappear,viewDidDisappear,deinitsão chamados uma única vez no ciclo de vida do objeto do controlador. - Os métodos
viewWillAppeareviewDidAppearpodem ser chamados várias vezes, por exemplo, ao navegar para frente e para trás.
Exemplo de sequência de chamadas ao criar e mostrar um controlador:
// Inicialização (se for do Storyboard/Nib)
init?(coder aDecoder: NSCoder)
// Ou inicialização (se programática)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
// Carregamento da vista
loadView()
viewDidLoad()
// Aparição da vista
viewWillAppear(true)
// ... a vista tornou-se visível ...
viewDidAppear(true)
// Desaparecimento da vista (por exemplo, ao navegar para outro VC)
viewWillDisappear(true)
// ... a vista deixou de ser visível ...
viewDidDisappear(true)
// Libertação de memória (quando já não há referências fortes ao controlador)
deinit