2011-06-23 21 views
7

Uczę się coredata, robiąc wiele prostych aplikacji testowych opartych na szablonie kontrolera nawigacyjnego xcode z zaznaczonym "coredą użycia".the Benifits of awakeFromNib?

Metoda awakeFromNib w delegacie aplikacji była dla mnie źródłem problemów, ponieważ dodaje do kontrolera inne widoki i zmienia kolejność ładowania, aby RootViewController mógł być drugim lub trzecim wyborem.

Zorientowałem się, co robi awakeFromNib, a ja usunąłem go, aby delegat aplikacji nie był już związany z żadnym konkretnym widokiem. (Więc kiedy chcę załadować RootViewController, załaduję go jako zwykły widok i użyję jego własnej viewDidLoad do zainicjowania managedObjectContext dla widoku).

Moje pytanie: czy są korzyści z wydajności lub inne korzyści za pomocą awakeFromNIb w AppDelegate? czy jest to po prostu inny sposób robienia tego samego, co robię z metody viewDidLoad?

Odpowiedz

5

Wszystkie metody są uruchamiane w różnych momentach i okolicznościach.

awakeFromNib jest wywoływana, gdy plik końcówki powiązany z klasą jest ładowany z dysku. Każda klasa, która może posiadać stalówkę, może z niej korzystać. viewDidLoad jest używany tylko przez kontrolery widoku. Zwykle wywoływany jest również przy ładowaniu z nib, ale można go również wywołać dzięki widokowi utworzonemu w pamięci (bardzo rzadka okoliczność).

W obu przypadkach wystarczy włączyć funkcjonalność, aby uruchomić tylko jeden raz instancja jest najpierw ładowana. Na przykład. wspólnym błędem nubie jest umieszczenie kodu w viewDidLoad, który musi być uruchamiany za każdym razem, gdy pojawi się widok. Powiedz tak, jak w widoku głównym, który otwiera widok szczegółów, a następnie pojawia się ponownie, gdy widok szczegółów zostanie odrzucony. Jeśli kod widoku głównego jest w trybie viewDidLoad, będzie on uruchamiany tylko po pierwszym załadowaniu widoku głównego, ale nie po ponownym wyświetleniu widoku głównego i pojawi się ponownie.

Zasadniczo nie inicjujesz żadnych innych widoków ani nie wykonujesz wiele czynności w obudzeniu delegata aplikacji ze stalówki. Zwykle jest to wykonywane w applicationDidFinishLaunching.

+0

Ok, dzięki. Obawiałem się, że pozbycie się awakeFromNib w delegacie aplikacji i przeniesienie kodu inicjalizacyjnego do viewDidLoad może obniżyć wydajność. – nick