2016-04-02 13 views
1

Es gibt bereits eine Frage wie diese wurde beantwortet, aber ich war nicht mit der Antwort zufrieden: Why does AppDelegate inherit from UIResponder?.Warum erbt Klasse AppDelegate von UIResponder?

Ich hätte gerne genauere Informationen, da ich versuche, die Architektur einer iOS App zu verstehen.

Soweit ich weiß, ist UIResponder für Dinge, die auf externe Kräfte "reagieren" (d. H. Berührungsereignisse, Bewegungsereignisse usw.). Wie kommt es, dass die Initialisierung einer Anwendung ein UIResponder sein muss? Vielleicht verstehe ich nicht, was die Instanz von AppDelegate tut.

+0

ich glaube, ich verstehe jetzt, was die AppDelegate tut: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index .html? hl = ar. Ich bin jedoch immer noch nicht sicher, warum AppDelegate von UIResponder erbt. –

+2

Beachten Sie, dass externe Ereignisse mehrere Typen umfassen können, nicht nur physische Interaktionen. Zum Beispiel, auf Hintergrundmodi zu reagieren (in den Hintergrund zu gehen, Audio zu stoppen, wenn andere Apps es brauchen, etc.) sind genau die Dinge, die 'UIResponder' verwalten soll. Nach dem Delegate-Muster soll die App selbst (ich meine "UIApplication") sie verwalten, aber sie delegiert an ein geeignetes Objekt (den App-Delegaten). –

+0

Danke, @ AlejandroIván. Also, lassen Sie mich klären (mit dem Fehlen einer geeigneten Terminologie): UIResponder umfasst das Betriebssystem, während die UIApplication spezifisch für jede App ist? Bitte korrigieren Sie mich, falls ich falsch liege. –

Antwort

3

Die Anwendungsdelegiertenklasse erbt von UIResponder.

Dies ist so, dass die Delegat-Instanz an der Responder-Kette teilnehmen kann und somit Aktionen auf Anwendungsebene behandelt.

Edit:

Ab iOS 5 einen Schritt 6: Die AppDelegate bekommt das letzte Wort über Ereignisse. Ab iOS 5 erbt der App-Delegate von UIResponder und nicht mehr wie zuvor von NSObject.

Kurz gesagt: zuerst die Ansicht, wenn die Ansicht einen View Controller hat, dann als nächstes die Superview bis zum Anfang der Hierarchie, das Fenster. Von dort zur Anwendung und schließlich zum App-Delegaten.

Die Hinzufügung des App-Delegate als potenzieller Responder ist eine willkommene Ergänzung, da wir selten - wenn überhaupt - Unterklasse UIApplication oder UIWindow. Aber wir haben immer unseren eigenen App-Delegaten, nur um das Fenster zu erstellen und den rootViewController in der -Anwendung hinzuzufügen: didFinishLaunching ... Delegate-Methode. Das ist also der de facto beste Platz für einen Responder, auf den zurückgegriffen werden kann, wenn es keine in der gesamten Ansichtshierarchie gibt.

Entnommen:

https://www.cocoanetics.com/2012/09/the-amazing-responder-chain/

+0

In Ordnung, das macht Sinn. Wie funktioniert die Responder-Kette? –

+0

Siehe bearbeitete Antwort. Es ist alt, aber relevant. – Roee84

+1

@SirJony https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html –

Verwandte Themen