Jaka jest różnica między viewDidLoad
i viewDidAppear
? Jaki rodzaj inicjalizacji lub niestandardowego kodu trafia do tych funkcji?
np. presentModalViewController
działa tylko wtedy, gdy jest obecny viewDidAppear
i nie jest włączony viewDidLoad
.
Odpowiedzi:
viewDidLoad
jest wywoływana dokładnie raz, kiedy kontroler widoku jest po raz pierwszy ładowany do pamięci. W tym miejscu chcesz utworzyć wystąpienie dowolnych zmiennych instancji i zbudować dowolne widoki, które istnieją przez cały cykl życia tego kontrolera widoku. Jednak widok zwykle nie jest jeszcze widoczny w tym momencie.viewDidAppear
jest wywoływana, gdy widok jest rzeczywiście widoczny, i może być wywoływana wiele razy podczas cyklu życia kontrolera widoku (na przykład, gdy modalny kontroler widoku jest odrzucany i widok staje się ponownie widoczny). Tutaj chcesz wykonać dowolne czynności dotyczące układu lub wykonać dowolny rysunek w interfejsie użytkownika - na przykład prezentując kontroler widoku modalnego. Jednak wszystko, co tu robisz, powinno być powtarzalne. Najlepiej nie przechowywać tutaj rzeczy, bo inaczej dostaniesz wycieki pamięci, jeśli nie zwolnisz ich, gdy widok zniknie.Zobacz: https://developer.apple.com/documentation/uikit/uiviewcontroller
źródło
viewDidLoad
jest generalnie wywoływany tylko raz i tylko raz, jest jedna sytuacja, w której można to wywołać ponownie. W szczególności, jeśli kiedykolwiek otrzymaszdidReceiveMemoryWarning
, twoje niewidoczne widoki mogą zostać zwolnione (chociaż kontrolery widoku są nietknięte), a kiedy wrócisz,viewDidLoad
mogą zostać ponownie wezwane.didReceiveMemoryWarning
. Ale zgadzam się, że jeśli piszesz swoje dobre praktykiviewDidLoad
, wszystko powinno być w porządku. Chodzi mi tylko o to, że niechlujne używanie ivarów i ręczne zarządzanie pamięcią może z pewnością skutkować wyciekamiviewDidLoad
. Ludzie powinni być wrażliwi nadidReceiveMemoryWarning
scenariusz i odpowiednio programować.viewDidLoad
kodu, który wyciekniedidReceiveMemoryWarning
. Westchnienie.Mówiąc najprościej, chciałbyś utworzyć dowolne kontrolki lub tablice w
viewDidLoad
, gdzie tak jak wviewDidAppear
, chcesz odświeżyć te kontrolki lub tablice.viewDidLoad
jest wywoływana raz podczas tworzenia kontrolera iviewDidAppear
wywoływana za każdym razem, gdy widok, no cóż, pojawi się DID. Powiedz więc, że masz pogląd modalny, który przedstawiasz, kiedy ten widok zostanie odrzucony,viewDidAppear
zostanie wywołany iviewDidLoad
nie zostanie wywołany.źródło
viewDidLoad
można dzwonić więcej niż jeden raz . Jeśli widok, który nie jest wyświetlany (pod stosem innych widoków), jest rozładowywany przez starsze wersje systemu iOS w sytuacji o małej ilości pamięci, wówczas kontroler widoku automatycznie załaduje widok ponownie, gdy trzeba będzie ponownie wyświetlić go na ekranie. W późniejszych wersjach iOS możesz zmniejszyć zużycie pamięci, robiąc to, co zrobił wcześniej iOS: Zwolnij widoki pozaekranowe podidReceiveMemoryWarning
nadejściu wiadomości, w którym to przypadkuviewDidLoad
zostanie wywołany ponownie.