Co najlepiej opisuje Delegat aplikacji? Jak to wpasowuje się w całą koncepcję?

Myślę, aby wiedzieć, co robi Delegat aplikacji. Ma kilka fajnych metod, takich jak -applicationDidFinishLaunching, które zostaną wywołane po zakończeniu uruchamiania aplikacji, i tak dalej. Ale co to właściwie jest? Czy to jakiś obiekt utworzony w funkcji UIApplicationMain?

I jak to działa, że każda klasa w mojej aplikacji ma dostęp do tego obiektu delegata aplikacji? Czy jest jakiś dobry wykres w sieci, który wizualizuje te relacje?

Author: Honey, 2009-05-06

2 answers

W Cocoa delegat jest obiektem, któremu inny obiekt podporządkowuje się w pytaniach o zachowanie i informuje o zmianach w swoim stanie. Na przykład, UITableViewDelegate odpowiada za odpowiadanie na pytania o to, jak powinien zachowywać się UITableView podczas dokonywania wyborów lub zmiany kolejności wierszy. Jest to obiekt, który UITableView pyta, kiedy chce wiedzieć, jak wysoki powinien być dany wiersz. W paradygmacie Model-widok-kontroler delegaci są kontrolerami, a wiele nazw delegatów kończy się w "Controller."

Na ryzyko stwierdzenia oczywistości, aplikacja Uiaplicationdelegate Jest delegatem dla aplikacji Uiaplication. Związek ten jest nieco bardziej oczywisty w Cocoa (Mac) niż w Cocoa Touch (iPhone), ponieważ delegat Nsapply jest w stanie bardziej bezpośrednio kontrolować zachowanie Nsapply (na przykład uniemożliwiając zakończenie aplikacji). iPhone nie pozwala na dużą kontrolę nad aplikacją, więc głównie aplikacja Uiaplicationdelegate jest informowana o zmianach, a nie prowadzenie aktywnego procesu decyzyjnego.

Interfejs aplikacji nie jest ściśle dostępny z każdego miejsca w aplikacji. Singleton UIApplication to ([UIApplication sharedApplication]), a dzięki niemu możesz znaleźć jego delegata. Nie oznacza to jednak, że każdy obiekt w aplikacji powinien rozmawiać bezpośrednio z delegatem aplikacji. Ogólnie odradzam programistom, aby losowe obiekty rozmawiały z delegatem aplikacji. Większość problemów, które są rozwiązywane w ten sposób są lepiej rozwiązane poprzez Singletony, NSNotification lub inne obiekty delegate.

Jeśli chodzi o jego tworzenie, na Macu nie ma nic magicznego w aplikacji. W większości przypadków jest to tylko obiekt inicjowany i podłączany przez stalówkę. Jednak na iPhonie delegat aplikacji może być nieco magiczny, jeśli zostanie utworzony przez UIApplicationMain (). Czwarty parametr to NSString wskazujący klasę delegata aplikacji, a UIApplicationMain () utworzy go i ustawi jako delegata programu sharedApplication. Pozwala to na możesz ustawić delegata bez stalówki (coś bardzo trudnego na Macu). Jeśli czwarty parametr do UIApplicationMain () jest zerowy (tak jak w szablonach Apple), to delegat jest tworzony i podłączany przez główną NIB, tak jak główne okno.

 36
Author: Rob Napier,
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-05-06 13:35:10

Obiekt jest instancjowany w ten sposób;

Main-function szuka głównego zestawu stalówek w info.plist. Nib ma jako delegat aplikacji, który jest ustawiony na jakąś klasę, która musi zaimplementować UIApplicationDelegates i jego wymagane metody. Delegat aplikacji ładuje następnie kontroler viewcontroller.

Służy jako obiekt wywołania zwrotnego dla całej aplikacji dla zdarzeń, które mają wpływ na całą aplikację, takich jak niska pamięć, itd.

 3
Author: ullmark,
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-05-06 12:19:27