Do czego służy AppDelegate i skąd mam wiedzieć, kiedy go używać?

Dopiero zaczynam prace nad aplikacjami na iPhone ' a. Skąd mam wiedzieć, kiedy powinienem umieszczać rzeczy w AppDelegate w porównaniu do klasy niestandardowej? Czy istnieje reguła lub jakikolwiek rodzaj analogii z innym językiem programowania, takim jak Python lub PHP, który używa wzorca AppDelegate?

Author: vikingosegundo, 2009-03-17

4 answers

Zwykle unikam podejścia projektowego sugerowanego przez użycie przez Andrew terminu "serce Twojej aplikacji". Chodzi mi o to, że myślę, że należy unikać wrzucania zbyt wielu rzeczy w centralnej lokalizacji - dobry projekt programu zwykle wymaga oddzielenia funkcjonalności przez "obszar zainteresowania".

Obiekt delegata jest obiektem, który jest powiadamiany, gdy obiekt, do którego jest podłączony, osiągnie 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 obserwatora jeden do jednego.

Oznacza to, że "obszar zainteresowania" dla AppDelegate jest obsługa specjalnych stanów aplikacji. Najważniejsze z nich to:

  • applicationDidFinishLaunching:-dobry do obsługi konfiguracji podczas uruchamiania i budowy
  • applicationWillTerminate: - dobry do czyszczenia na końcu

Należy unikać umieszczenie innych funkcjonalności w AppDelegate, ponieważ tak naprawdę nie należą tam. Takie inne Funkcje Obejmują:

  • Dane dokumentu -- powinieneś mieć Menedżer dokumentów singleton (dla aplikacji wielu dokumentów) lub singleton dokumentu (dla aplikacji jednego dokumentu)
  • Kontrolery przycisków/tabel/widoku, metody delegatów widoku lub inna obsługa widoku (z wyjątkiem budowy widoku najwyższego poziomu w aplikacji applicationDidFinishLaunching:) -- ta praca powinna być w odpowiednie klasy kontrolera widoku.

Wiele osób włącza te rzeczy do swojego AppDelegate, ponieważ są leniwi lub myślą, że AppDelegate kontroluje cały program. Należy unikać centralizacji w AppDelegate, ponieważ mętnieje obszary niepokojące w aplikacji i nie skaluje.

 228
Author: Matt Gallagher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-27 06:40:15

Twój delegat aplikacji jest sercem Twojej aplikacji. To skutecznie twój "kontroler programu".

Delegat aplikacji jest klasą, która odbiera komunikaty na poziomie aplikacji, w tym wiadomość applicationDidFinishLaunching najczęściej używaną do inicjowania tworzenia innych widoków.

Choć nie do końca podobne, możesz myśleć o nim jako o rutynie "main ()" Twojego programu Cocoa.

 23
Author: Andrew Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-16 23:14:04

Mam nadzieję, że to trochę pomoże ...

Programiści nowi w tym języku zawsze mają to samo pytanie - czy program zaczyna się od głównej metody? Tak, masz rację w tym przypadku; Aplikacje IOS również zaczynają się od głównej metody.
Twoja główna klasa wywołuje poniższą funkcję:

 UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 

UIApplicationMain uruchamia pętlę run Cocoa Touch i infrastrukturę aplikacji, która tworzy obiekt UIApplication. Nasza aplikacja potrzebuje treści, więc objective-c używa do tego delegata. Dlatego my nazwij to AppDelegate(działaj jako delegat UIApplication). Wdrażamy niektóre opcjonalne metody tego delegata i zachowuje się on odpowiednio.

 1
Author: Anurag Bhakuni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 16:44:18

@Shivam, dzięki.

Z tego, co rozumiem appDelegate, jest zbliżony do tego, co Application jest w Androidzie. Na viewDidLoad, viewDidDisappear jest porównywalny z cyklem życia Androida. Każda aplikacja ma cykl życia, Od uruchomienia do przerwania od połączeń przychodzących, do wyświetlania powiadomień. Jeśli potrzebujesz kodu, aby zrobić coś specjalnego, gdy wystąpią te system zdarzenia, musisz napisać kod metod.

W Androidzie używamy onPause, onDestroy, onCreate metody wywołania zwrotnego do obsługi takiego systemu wydarzenia.

 1
Author: Siddharth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 03:23:12