Zwykle unikam podejścia projektowego sugerowanego przez użycie przez Andrew terminu „serce twojej aplikacji”. Mam na myśli to, że myślę, że należy unikać wrzucania zbyt wielu rzeczy do centralnej lokalizacji - dobry projekt programu zwykle wymaga oddzielenia funkcjonalności według „obszaru zainteresowania”.
Obiekt delegata to obiekt, który jest powiadamiany, gdy obiekt, z którym jest połączony, osiąga określone zdarzenia lub stany. W tym przypadku delegat aplikacji jest obiektem, który otrzymuje powiadomienia, gdy obiekt UIApplication osiągnie określone stany. Pod wieloma względami jest to wyspecjalizowany wzorzec obserwatorów jeden do jednego.
Oznacza to, że „obszarem zainteresowania” dla AppDelegate jest obsługa specjalnych stanów UIApplication. Najważniejsze z nich to:
- applicationDidFinishLaunching: - dobre do obsługi konfiguracji i konstrukcji podczas uruchamiania
- applicationWillTerminate: - dobre do czyszczenia pod koniec
Powinieneś unikać umieszczania innych funkcji w AppDelegate, ponieważ tak naprawdę tam nie należą. Takie inne funkcje obejmują:
- Dane dokumentu - powinieneś mieć singleton menedżera dokumentów (dla aplikacji z wieloma dokumentami) lub pojedynczy dokument (dla aplikacji z jednym dokumentem)
- Kontrolery przycisków / tabel / widoków, metody delegatów widoku lub inna obsługa widoku (poza budową widoku najwyższego poziomu w applicationDidFinishLaunching :) - ta praca powinna znajdować się w odpowiednich klasach kontrolera widoku.
Wiele osób wrzuca te rzeczy do swojego AppDelegate, ponieważ są leniwi lub myślą, że AppDelegate kontroluje cały program. Powinieneś unikać centralizacji w AppDelegate, ponieważ zakłóca to obszary w aplikacji i nie jest skalowane.
Twój delegat aplikacji jest sercem Twojej aplikacji. W rzeczywistości jest to Twój „Kontroler programu”.
Delegat aplikacji to klasa odbierająca komunikaty na poziomie aplikacji, w tym komunikat applicationDidFinishLaunching, który jest najczęściej używany do inicjowania tworzenia innych widoków.
Chociaż nie jest to dokładnie podobne, możesz o tym myśleć jako o programie „main ()” w programie Cocoa.
źródło
@Shivam, dzięki.
Z tego, co rozumiem
appDelegate
, jest zbliżony do tego, coApplication
jest w Androidzie.viewDidLoad
,viewDidDisappear
Jest porównywalny do tego, co Lifecycle Android. Każda aplikacja ma cykl życia, od uruchomienia, przez przerwy od przychodzących połączeń, aż po pojawianie się powiadomień. Jeśli chcesz, aby Twój kod zrobił coś specjalnego, gdysystem
wystąpią te zdarzenia, musisz napisać kod metod.W Androidzie używamy
onPause
,onDestroy
,onCreate
trochę callback metody do obsługi takich zdarzeń systemowych.źródło
onPause
,onCreate
orazonDestroy
metody Androida są bardziej podobny doviewDidDisappear
,viewDidLoad
metody cyklu IOS Zobacz sterownika. Jeśli musisz porównać, powiedziałbym, żeApplication
klasa Androida byłaby bliższa klasieAppDelegate
iOS.Mam nadzieję, że to pomoże trochę bardziej ...
Programiści nowi w tym języku zawsze mają to samo pytanie - czy program zaczyna się od metody głównej? Tak, masz rację w tym przypadku; Aplikacje na iOS również zaczynają się od głównej metody.
Twoja główna klasa wywołuje poniższą funkcję:
UIApplicationMain uruchamia pętlę uruchamiania Cocoa Touch i infrastrukturę aplikacji, która tworzy
UIApplication
obiekt. Nasza aplikacja potrzebuje treści, więc Objective-c używa delegata do obsługi tego. Dlatego nazywamy to AppDelegate (działaj jako delegatUIApplication
). Implementujemy niektóre z opcjonalnych metod tego delegata i odpowiednio się zachowuje.źródło