アプリケーションデリゲートを最もよく説明するものは何ですか?コンセプト全体にどのように適合しますか?

StackOverflow https://stackoverflow.com/questions/828827

質問

App Delegateの機能を知っていると思います。アプリの起動が完了したときに呼び出される -applicationDidFinishLaunching などの便利なメソッドがあります。しかし、実際にはそれは何ですか? UIApplicationMain 関数でインスタンス化されたオブジェクトですか?

そして、アプリ内のすべてのクラスがそのApp Delegateオブジェクトにアクセスすることはどのように機能しますか?これらの関係を視覚化する良いグラフはネット上にありますか?

役に立ちましたか?

解決

Cocoaでは、デリゲートは、別のオブジェクトが振る舞いの質問に応じて延期し、その状態の変化について通知するオブジェクトです。たとえば、UITableViewDelegateは、選択が行われたときまたは行が並べ替えられたときのUITableViewの動作に関する質問に答える役割を果たします。 UITableViewは、特定の行の高さを知りたいときに尋ねるオブジェクトです。 Model-View-Controllerパラダイムでは、デリゲートはコントローラであり、多くのデリゲートの名前は" Controller"

で終わります

明らかなことを述べるリスクがあるので、UIApplicationDelegateはUIApplicationのデリゲートです。 NSApplicationデリゲートはNSApplicationの動作をより直接的に制御できるため(アプリケーションが終了するのを防ぐため)、Cocoa Touch(iPhone)よりもCocoa(Mac)の方が関係が明白です。 iPhoneではUIApplicationをあまり制御できません。そのため、ほとんどの場合、UIApplicationDelegateはアクティブな意思決定プロセスではなく、変更について通知されます。

UIApplicationDelegateは、アプリ内のどこからでも厳密に使用できるわけではありません。シングルトンUIApplicationは([UIApplication sharedApplication])であり、それを通してそのデリゲートを見つけることができます。しかし、これは、アプリのすべてのオブジェクトがアプリのデリゲートと直接対話することが適切であることを意味するものではありません。一般的に、開発者がランダムなオブジェクトをアプリのデリゲートと対話させないようにします。この方法で解決されるほとんどの問題は、シングルトン、NSNotification、またはその他のデリゲートオブジェクトを介してより適切に解決されます。

作成に関しては、Macではアプリのデリゲートについて魔法のようなことは何もありません。ほとんどの場合、NIBによってインスタンス化および配線されたオブジェクトにすぎません。ただし、iPhoneでは、UIApplicationMain()によってインスタンス化される場合、アプリのデリゲートはわずかに魔法のようになります。 4番目のパラメーターは、アプリデリゲートのクラスを示すNSStringであり、UIApplicationMain()は、それを作成し、sharedApplicationのデリゲートとして設定します。これにより、NIBなしでデリゲートを設定できます(Macでは非常に困難です)。 UIApplicationMain()の4番目のパラメーターが(Appleテンプレートにあるように)nilの場合、メインウィンドウと同様に、メインNIBによってデリゲートが作成され、配線されます。

他のヒント

オブジェクトはこの方法でインスタンス化されます;

main-functionは、info.plistで設定されたメインのペン先を探します。ペン先には、UIApplicationDelegatesとその必要なメソッドを実装する必要があるクラスに設定されたアプリデリゲートがあります。その後、アプリのデリゲートはいくつかのViewControllerをロードします。

低メモリなど、アプリケーション全体に影響するイベントのアプリケーション全体のコールバックオブジェクトとして機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top