2016-04-02 13 views
1

このような質問は既にありましたが、私は答えに満足できませんでした:Why does AppDelegate inherit from UIResponder?AppDelegateクラスがUIResponderから継承するのはなぜですか?

私はiOSアプリケーションのアーキテクチャを理解しようとしているので、詳細をお伝えしたいと思います。

私が知る限り、UIResponderは、外部の力(タッチイベント、モーションイベントなど)に「反応する」ものです。 アプリケーションの初期化はどのようにしてUIResponderになる必要がありますか?たぶん、私はAppDelegateのインスタンスが何をしているのか理解していません。

+0

私は今AppDelegateが何をするかを理解すると思う:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index .html?hl = ar。しかし、AppDelegateがなぜUIResponderから継承するのかまだ分かりません。 –

+2

外部イベントは、物理的なやりとりだけでなく、いくつかの種類があり得ることに注意してください。例えば、バックグラウンドモード(バックグラウンドに行く、他のアプリがそれを必要とするときにオーディオを止めるなど)に応答することは、「UIResponder」が管理することになっているものです。デリゲートパターンに続いて、アプリケーション自体(つまり、 'UIApplication')はそれを管理することになっていますが、適切なオブジェクト(アプリケーションデリゲート)に委譲します。 –

+0

ありがとう、@AlejandroIván。だから適切な用語が不足していることを明らかにする。UIApplicationは各アプリケーション固有のものであるが、UIResponderはOSにまたがっている。私が間違っているなら、私を修正してください。 –

答えて

3

アプリケーションデリゲートクラスは、UIResponderから継承します。

これは、デリゲートインスタンスがレスポンダチェーンに参加し、アプリケーションレベルのアクションを処理できるようにするためです。

編集:

ステップ6があるのiOS 5のとおり:アプリのデリゲートは イベントの最終的な単語を取得しますが。 iOS 5以降、アプリケーションデリゲートは UIResponderから継承され、以前はNSObjectから継承されていません。

簡潔に言うと、ビューにビューコントローラがある場合、最初に スーパービューが階層の最上部、ウィンドウまで表示されます。 からアプリケーションへ、最後にはアプリケーションの代理人へ。

可能性のあるレスポンダとしてアプリケーションデリゲートを追加することは歓迎します。私たちはめったにサブクラスUIApplicationまたは UIWindowであるため、歓迎です。しかし、 ウィンドウを作成して アプリケーション:didFinishLaunching ... delegateメソッドにrootViewControllerを追加するだけの場合、私たちは常に独自のアプリケーションデリゲートを持っています。したがって、 の場合、全体のビュー階層に が存在しない場合、レスポンダが実質的に最善の場所に戻ってしまいます。

から撮影:

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

+0

申し訳ありません。レスポンダーチェーンはどのように機能しますか? –

+0

編集された回答を参照してください。それは古いですが、関連性があります。 – Roee84

+1

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

関連する問題