Apple公式ドキュメント Start Developing iOS Apps (Swift) の一部を写経します。
appデリゲートソースファイル
AppDelegate.swift
には、2つの主要な関数があります。
-
AppDelegate
クラスを定義します。appデリゲートは、コンテンツが描画されるウィンドウを作成し、アプリケーション内の状態遷移を受け付けるための場所を提供します。 - アプリケーションのエントリポイントと、入力イベントをアプリケーションへ渡す実行ループを作成します。これはファイル先頭にある
UIApplicationMain
属性(@UIApplicationMain
)によって行われます。
UIApplicationMain
属性は、デリゲートクラスとしてAppDelegate
クラスをUIApplicationMain
へ渡すことと同義です。戻り値の中で、システムはアプリケーションオブジェクトを作成します。アプリケーションオブジェクトはアプリケーションのライフサイクルを管理する責任を負います。システムはAppDelegate
クラスのインスタンスもまた作成しアプリケーションオブジェクトへ割り当てます。最終的にシステムはアプリケーションを起動します。
わかったこと:
アプリケーションの実行時に、アプリケーションオブジェクトとappデリゲートが作成される。
UIApplicationMain
属性をつけることで、アプリケーションのエントリポイントとappデリゲートであることをシステムに認識させる。
AppDelegate
クラスはプロパティを一つ含みます。
var window: UIWindow?
このプロパティはアプリケーションのウィンドウへの参照を格納しています。ウィンドウはアプリケーションのビュー階層の根元です。コンテンツはこの中に描画されます。このwindowプロパティはオプショナルであることに注意が必要です。ある時点では値が入っていません(nilです)。
AppDelegate
クラスは以下のメソッドのスタブ実装も含んでいます。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
func applicationWillResignActive(_ application: UIApplication)
func applicationDidEnterBackground(_ application: UIApplication)
func applicationWillEnterForeground(_ application: UIApplication)
func applicationDidBecomeActive(_ application: UIApplication)
func applicationWillTerminate(_ application: UIApplication)
これらのメソッドは、アプリケーションオブジェクトにappデリゲートとやりとりさせるためのものです。
いずれのデリゲートメソッドも既定の振る舞いを持っています。メソッドが空か存在しないと、既定の振る舞いをします。
わかったこと:
AppDelegate
プロトコルを実装することでアプリケーションオブジェクトとやりとりする。
AppDelegate
プロトコルの中身を実装しないと、既定の振る舞いをする。