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?
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.
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.
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