Ao trabalhar com visualizações e visualizadores de controladores em um aplicativo para iPhone, alguém pode explicar a diferença entre loadView e viewDidLoad?
Meu contexto pessoal é que eu construo todas as minhas visualizações a partir do código, não uso e não utilizarei o Interface Builder, caso isso faça alguma diferença.
Descobri que, muitas vezes, quando adiciono o código init ao loadView, acabo com um rastreamento de pilha infinito; portanto, normalmente faço toda a construção de exibição de filhos em viewDidLoad ... mas não é realmente claro para mim quando cada um é executado, e qual é o local mais apropriado para colocar o código init. O que seria perfeito, é um diagrama simples das chamadas de inicialização.
Obrigado!
fonte
-(void) loadView { // Frame for Hypnosis view CGRect frame = [[UIScreen mainScreen] bounds]; // Create a Hipnosis view v = [[HypnosisView alloc] initWithFrame:frame]; self.view = v;
loadView
é o método emUIViewController
que realmente carregará a exibição e a atribuirá àview
propriedade Esse também é o local que uma subclasseUIViewController
substituirá se você desejar configurar programaticamente aview
propriedade.viewDidLoad
é o método chamado após o carregamento da visualização. Isso é chamado depois que o loadView é chamado. É um local onde você pode substituir e inserir o código que faz a configuração inicial adicional da visualização depois que ela é carregada.fonte
deve ser usado quando você carrega sua visualização de um NIB e deseja executar qualquer personalização após o lançamento
deve ser usado quando você deseja criar sua exibição programaticamente (sem o uso do Interface Builder)
fonte
Apenas adicionando alguns exemplos de código para demonstrar o que o NilObject disse:
fonte
Para impedir que um loop infinito aconteça quando você lê self.view, chame a super implementação da classe ao carregar uma view. A super implementação alocará um novo UIView para você.
fonte
[super loadView];
. Isso foi contradito nos exemplos, mas acho que os documentos disseram corretamente (eu encontrei vários bugs em exemplos ao longo do tempo).[super loadView]
é necessário para UITableViewController etc. Contudo! Qualquer configuração pós-carregamento (por exemplo, adicionar sub-visualizações extras) deve ser feita no viewDidLoad.A maneira mais fácil de usar o loadView é criar algum tipo de controlador de vista de base, como MyBaseViewController, que é uma subclasse do UIViewController. No método loadView, crie view desta maneira:
E quando você precisa criar algum controlador de exibição, basta usar a subclasse de MyBaseViewController e, no controlador loadView, basta chamar [super loadView] como este
fonte
loadView()
é chamado quando seu controlador é solicitado a criar o seuself.view
. Você pode fazer isso sozinho comoOu a classe UIController pai do seu controlador já tem um nome de método
-loadView()
que inicializa seu self.view na exibição em branco. Então você pode ligarEu realmente recomendo a segunda abordagem, pois incentiva a herança. Somente se o seu controlador de exibição não for herdado diretamente do UIViewController.
fonte
A definição dada pela Apple no viewDidLoad mencionou que é chamada após o carregamento da visualização do controlador na memória. Para colocá-lo em um termo simples, é o primeiro método a carregar.
Você pode estar pensando em que condição esse método será totalmente utilizado? A resposta é, basicamente, o que você deseja que o aplicativo carregue primeiro. Por exemplo, você pode querer uma cor de fundo diferente, em vez de branco, talvez possa escolher o azul.
fonte