Könnte jemand bitte erklären, wie die Kontrolle der Ausführung in einer iOS-Anwendung fließt? Ich weiß, dass UIApplicationMain zuerst von main aufgerufen wird. Dann was? Was ist die Beziehung zwischen meinen definierten Methoden und Haupt? Ist alles ereignisgesteuert oder kann es eine strukturierte Sequenz geben?
Ich will nicht so vage sein, ich muss nur wissen, wo ich anfangen soll. Vielleicht sehe ich das falsch an.
Zum Beispiel würde ich in C ++ so etwas tun wie:
%Vor%Vielen Dank im Voraus.
Wie Sie gesagt haben, erstellt UIApplicationMain eine Anwendungsausführung im System. Ich gehe davon aus, dass Sie interessiert sind, was für eine bestimmte Anwendung relevant ist. Ich nehme auch einen typischen Fall an, der in vielen Projektvorlagen dargestellt wird, die Xcode bietet.
Der Prozess zum Laden von Anwendungen untersucht die Informationseigenschaftsliste der Anwendung. Dort wird der Name der Hauptnib-Datei gefunden, und die UIApplication-Instanz Ihrer Anwendung lädt die entsprechende NIB-Datei aus dem Anwendungspaket. Diese NIB-Datei gibt eine Anwendungsdelegatklasse an und teilt mit, dass eine Instanz der Klasse mit der Delegateigenschaft Ihrer UIApplication-Instanz verbunden werden soll.
Abhängig von der Haupt-Nib-Datei können auch andere Objekte erstellt und verbunden werden, z. B. das Anwendungsfenster, der Hauptansicht-Controller usw.
Nun endet die Ladesequenz und alles ist ereignisgesteuert, beginnend mit Ihrer Anwendungsdelegiertenklasse, um die berühmte -applicationDidFinishLaunching:
-Nachricht zu erhalten.
Wie Sie bereits erwähnt haben, ist die Funktion main()
in main.m
der Startpunkt, der dann UIApplicationMain()
aufruft. Wenn Sie die Dokumente überprüfen, sehen Sie Folgendes: UIApplicationMain
nimmt vier Argumente:
Die ersten beiden sind nur die Argumentanzahl und die Variablenliste, die von main()
übergeben wurden. Aber das dritte und vierte Argument sind Zeiger auf NSStrings. Das dritte Argument gibt an, welche Klasse UIApplication
sein sollte . Sofern Sie keine Unterklassen UIApplication
vorhaben, geben Sie nil
für das dritte Argument an. Das vierte Argument gibt an, welche Klasse die Delegate-Klasse von UIApplication sein soll, die auf alle in UIApplicationDelegate
Protokoll. Sie müssen nicht direkt damit zu tun haben, wie es in allen Xcode-Vorlagen enthalten ist:
Lass dich nicht vom NSStringFromClass([AppDelegate class]))
-Bit werfen. Das ist nur eine schicke Methode, das vierte Argument anzugeben, damit der richtige Delegat aufgerufen wird, wenn Sie später den Namen von AppDelegate.m
ändern.
UIApplication
startet die Hauptereignisschleife und ruft -application:didFinishLaunchingWithOptions:
auf, eine der Methoden, die der Delegat verarbeiten muss. Sehen Sie sich AppDelegate.m
an, und Sie finden einen Vorlagencode für diese Methode. Hier können Sie mit der Anpassung beginnen und Dinge erstellen, die vorhanden sein müssen, bevor UIWindow
und andere Instanzen von UIView
erstellt werden:
Nun sind das Anwendungsfenster und der Root-View-Controller definiert und die App ist ausgeschaltet und läuft.
All dies und noch einiges mehr wird hier hervorragend erklärt: Ссылка
Von Apple-Dokumenten -
Der Anwendungslebenszyklus ist die Abfolge von Ereignissen, die zwischen dem Start und dem Beenden Ihrer Anwendung auftreten. In iOS startet der Benutzer Ihre Anwendung, indem er auf das Symbol auf dem Startbildschirm tippt. Kurz nachdem das Antippen erfolgt ist, zeigt das System einige Übergangsgrafiken an und startet Ihre Anwendung durch Aufruf der Hauptfunktion. Von diesem Punkt an wird der Großteil der Initialisierungsarbeit an UIKit übergeben, die die Haupt-Nib-Datei der Anwendung lädt und die Ereignisschleife vorbereitet.
Tags und Links objective-c sequence uiapplication execution control-flow