Czy podczas pracy z widokami i kontrolerami widoku w aplikacji na iPhone'a ktoś może wyjaśnić różnicę między loadView i viewDidLoad?
Mój osobisty kontekst jest taki, że wszystkie moje widoki tworzę z kodu, nie używam i nie będę używać Interface Builder, jeśli to coś zmieni.
Zauważyłem, że często, gdy dodaję kod init do loadView, kończę z nieskończonym śladem stosu, więc zwykle wykonuję wszystkie moje budowanie widoku podrzędnego w viewDidLoad ... ale naprawdę nie jest dla mnie jasne, kiedy każdy z nich zostanie wykonany, i jakie jest bardziej odpowiednie miejsce do umieszczenia kodu inicjującego. Idealny byłby prosty schemat wywołań inicjalizacyjnych.
Dzięki!
źródło
-(void) loadView { // Frame for Hypnosis view CGRect frame = [[UIScreen mainScreen] bounds]; // Create a Hipnosis view v = [[HypnosisView alloc] initWithFrame:frame]; self.view = v;
loadView
jest metodąUIViewController
, która faktycznie załaduje widok i przypisze go doview
właściwości. Jest to również lokalizacja, którą podklasa klasyUIViewController
zastąpiłaby, gdybyś chciał programowo skonfigurowaćview
właściwość.viewDidLoad
to metoda wywoływana po załadowaniu widoku. Jest to wywoływane po wywołaniu loadView. Jest to miejsce, w którym można nadpisać i wstawić kod, który wykonuje dalszą wstępną konfigurację widoku po jego załadowaniu.źródło
ma być używany, gdy ładujesz widok z NIB i chcesz wykonać dowolne dostosowanie po uruchomieniu
ma być używany, gdy chcesz stworzyć widok programowo (bez użycia Interface Builder)
źródło
Wystarczy dodać kilka przykładów kodu, aby zademonstrować, co powiedział NilObject:
źródło
Aby zapobiec powstawaniu nieskończonej pętli podczas czytania self.view, wywołaj super implementację klasy podczas ładowania widoku. Super implementacja przydzieli Ci nowy UIView.
źródło
[super loadView];
. Zaprzeczono temu w przykładach, ale myślę, że doktorzy powiedzieli to poprawnie (znalazłem wiele błędów w przykładach w czasie).[super loadView]
jest jednak potrzebny dla UITableViewController itp. Jednak! Wszelkie ustawienia po załadowaniu (np. Dodawanie dodatkowych podglądów podrzędnych) powinny być wykonywane w viewDidLoad.Najłatwiejszym sposobem użycia loadView jest utworzenie pewnego typu kontrolera widoku podstawowego, takiego jak MyBaseViewController, który jest podklasą UIViewController. W jego metodzie loadView stwórz widok w ten sposób:
A kiedy potrzebujesz stworzyć jakiś kontroler widoku, po prostu użyj podklasy MyBaseViewController iw jego kontrolerze loadView po prostu wywołaj [super loadView] w ten sposób
źródło
loadView()
jest wywoływana, gdy kontroler jest proszony o utworzenie plikuself.view
. Możesz to zrobić samodzielnieAlbo klasa nadrzędna UIController kontrolera ma już nazwę metody,
-loadView()
która inicjuje widok self.view w pustym widoku. Wtedy możesz zadzwonićNaprawdę polecam drugie podejście, ponieważ zachęca ono do dziedziczenia. Tylko wtedy, gdy kontroler widoku nie jest bezpośrednio dziedziczony po UIViewController.
źródło
Definicja podana przez Apple w viewDidLoad wspomina, że jest wywoływana po załadowaniu widoku kontrolera do pamięci. Mówiąc prościej, jest to pierwsza metoda, która zostanie załadowana.
Być może zastanawiasz się, pod jakim warunkiem ta metoda zostanie w pełni wykorzystana? Odpowiedź brzmi: w zasadzie wszystko, co chcesz, aby aplikacja załadowała się jako pierwsza. Na przykład możesz chcieć mieć inny kolor tła zamiast białego, być może możesz wybrać niebieski.
źródło