Middle
Fale sobre os ciclos de vida do controlador e como eles são chamados.
sobes.tech IA
Resposta da IA
O ciclo de vida de UIViewController inclui métodos que são chamados em momentos específicos da sua existência: desde a criação até à destruição.
Principais métodos do ciclo de vida:
-
viewDidLoad():- É chamado após a vista do controlador ter sido carregada na memória, mas antes de ser exibida na tela.
- Usado para inicializar dados, configurar elementos de UI que não dependem da geometria da vista.
- É chamado apenas uma vez durante a vida do controlador.
-
viewWillAppear(_ animated: Bool):- É chamado imediatamente antes da vista do controlador aparecer na tela.
- Usado para realizar tarefas que devem acontecer sempre que a vista se torna visível (por exemplo, atualizar dados, animações).
- Pode ser chamado várias vezes.
-
viewDidAppear(_ animated: Bool):- É chamado após a vista do controlador ter aparecido completamente na tela e estar visível para o utilizador.
- Adequado para iniciar animações ou outras tarefas que requerem que a vista esteja totalmente pronta.
- Pode ser chamado várias vezes.
-
viewWillDisappear(_ animated: Bool):- É chamado imediatamente antes da vista do controlador ser removida da tela (por exemplo, ao navegar para outra vista).
- Usado para guardar o estado ou parar tarefas que não devem continuar enquanto a vista não estiver visível (por exemplo, parar temporizadores).
- Pode ser chamado várias vezes.
-
viewDidDisappear(_ animated: Bool):- É chamado após a vista do controlador ter sido completamente removida da tela.
- Usado para libertar recursos ou parar tarefas que não são necessárias quando a vista não está visível.
- Pode ser chamado várias vezes.
-
viewWillLayoutSubviews():- É chamado antes do controlador começar a dispor as suas subviews.
- Usado para fazer alterações nas restrições ou quadros antes da auto-layout.
- Pode ser chamado várias vezes.
-
viewDidLayoutSubviews():- É chamado após o controlador ter terminado de dispor as suas subviews.
- Usado para realizar tarefas que dependem dos tamanhos finais das subviews (por exemplo, configurar indicadores de scroll ou sombras).
- Pode ser chamado várias vezes.
-
didReceiveMemoryWarning():- É chamado em caso de memória RAM baixa.
- Usado para libertar recursos que podem ser recriados mais tarde.
-
deinit:- É chamado imediatamente antes do objeto
UIViewControllerser destruído e libertado da memória. - Usado para realizar limpeza final, como remover observadores ou fechar conexões de rede.
- É chamado imediatamente antes do objeto
Ordem de chamada:
Ordem típica de métodos ao aparecer o controlador:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
Ordem típica de métodos ao desaparecer o controlador:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(se o controlador já não for necessário)
Exemplo de implementação:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Configuração de UI, inicialização de dados
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Atualização de UI antes de aparecer
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// A vista apareceu, iniciar animações
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Preparar para desaparecer, guardar estado
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// A vista desapareceu, limpeza
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Antes do auto layout
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Depois do auto layout
print("viewDidLayoutSubviews")
}
deinit {
// Limpeza de recursos
print("deinit")
}
}