viewDidLoad to rzeczy, które musisz zrobić raz. viewWillAppear jest wywoływana za każdym razem, gdy pojawia się widok. Powinieneś robić rzeczy, które musisz zrobić tylko raz w viewDidLoad - jak ustawianie twoich tekstów UILabel. Możesz jednak zmodyfikować określoną część widoku za każdym razem, gdy użytkownik ją zobaczy, np. aplikacja iPoda przewija tekst do początku za każdym razem, gdy przejdziesz do widoku "Teraz odtwarzane".
Jednak, gdy ładujesz elementy z serwera, musisz również pomyśleć o opóźnieniu. Jeśli zapakujesz całą komunikację sieciową do viewDidLoad lub viewWillAppear, zostaną wykonane zanim użytkownik zobaczy widok - co może skutkować krótkim zamrożeniem aplikacji. Dobrym pomysłem może być najpierw pokazanie użytkownikowi nieopancerzonego widoku za pomocą jakiegoś wskaźnika aktywności. Kiedy skończysz pracę w sieci, która może zająć sekundę lub dwie (lub nawet może się nie powieść - kto wie?), Możesz wypełnić widok swoimi danymi. Dobre przykłady tego, jak można to zrobić, można zobaczyć u różnych klientów Twittera. Na przykład, gdy przeglądasz stronę szczegółów autora w witrynie Twitterrific, widok wyświetla tylko "Ładowanie ...", aż do zakończenia zapytań sieciowych.
W związku z tym, że viewWillAppear potencjalnie jest wywoływany wielokrotnie. Czy ta metoda byłaby uruchomiona, gdyby na przykład widok viewcontrollers stał się widoczny po ukryciu (to znaczy okludowanym tutaj, a nie ukrytej metodzie na UIView). W jakim scenerii widok viewAppear byłby wywoływany bez poprzedzania wywołaniem viewDidLoad? – dugla
viewDidLoad TYLKO zostaje wywołany podczas konstruowania widoku - na przykład po wywołaniu kontrolera initFromNibNamed kontrolera widoku, gdy widok jest dostępny. viewWillAppear wywoływany jest za każdym razem, gdy kontroler podglądu nie był widoczny, ale jest widoczny - więc gdy kontroler widoku jest wciśnięty, wywoływana jest funkcja viewWillAppear. Jeśli naciśniesz inny widok, a użytkownik powróci, funkcja viewWillAppear zostanie wywołana ponownie. –
Dzięki Kendall. Yah, kilka strategicznie rozmieszczonych NSLogów kazało mi posortować. viewWillAppear/viewWillDiss wyświetla się na viewcontroller push/pops. – dugla