Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@Howasuto

AppDelegateについて

More than 1 year has passed since last update.

目的

iOSアプリを開発する上で、当たり前のように使うAppDelegateクラスについての理解を深める。また、ストーリーボードを使用しない場合のAppDelegateへの記述にも触れる。

ソースコード

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = UINavigationController(rootViewController: <表示したいViewControllerを入れる>) 
    self.window?.makeKeyAndVisible()

    return true
  }
  func applicationWillResignActive(application: UIApplication) {
        println("アプリ閉じそうな時に呼ばれる")
    }

    func applicationDidEnterBackground(application: UIApplication) {
        println("アプリを閉じた時に呼ばれる")
    }

    func applicationWillEnterForeground(application: UIApplication) {
        println("アプリを開きそうな時に呼ばれる")
    }

    func applicationDidBecomeActive(application: UIApplication) {
        println("アプリを開いた時に呼ばれる")
    }

    func applicationWillTerminate(application: UIApplication) {
        println("フリックしてアプリを終了させた時に呼ばれる")
    }
}

@UIApplicationMainとは

#import
#import "AppDelegate.h"

int main(int argc, char *argv[]) {
  @autoreleasepool {
  //AppDelegateのクラス名を指定
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}

@UIApplicationとは上記のコードを省略するための記述であり、この記述のおかげで上記のmain関数を自動実装してくれます。ちなみにこのmain関数というのはアプリケーションを起動した時点で、はじめに実行する関数であり、ここでAppDelegateのクラス名を指定しているため、アプリ起動時などにAppDelegateが実行されるようになっている。

AppDelegate.swiftとは

xcodeでプロジェクトをcreateした時点で自動生成されるファイルの一つであり、アプリ全体のライフタイムイベントを管理するためにAppDelegateクラスが記述されている。
そしてそのAppDelegateクラスはUIResponderを継承して、UIApplicationDelegateプロトコルを適合している。

//上記省略

func applicationWillResignActive(application: UIApplication) {
        println("アプリ閉じそうな時に呼ばれる")
    }

    func applicationDidEnterBackground(application: UIApplication) {
        println("アプリを閉じた時に呼ばれる")
    }

    func applicationWillEnterForeground(application: UIApplication) {
        println("アプリを開きそうな時に呼ばれる")
    }

    func applicationDidBecomeActive(application: UIApplication) {
        println("アプリを開いた時に呼ばれる")
    }

    func applicationWillTerminate(application: UIApplication) {
        println("フリックしてアプリを終了させた時に呼ばれる")
    }

上記のようにAppDelegateクラスにはいくつかのメソッドがファイル生成時に定義されており、何かしらの動作がアプリに行われた際に各メソッドが実行されるようになっている。

UIResponderクラスとは

UIResponder(のインスタンス)は、UIKitアプリのイベント処理バックボーン(裏側の処理)を構成しています。つまりUIResponderクラスはイベントの処理を管理するクラスであり、UIViewやUIApplicationなどのスーパークラスになります。そのためタッチイベントやモーションイベントをこのクラスが管理しています。そのため、UIViewを継承しているUITextFieldやUITextViewはUIResponderのプロパティやメソッド使えることになります。

UIApplicationDelegateプロトコルとは

UIApplicationDelegateプロトコルとは、アプリの共有動作を管理するために使用する一連のメソッドを宣言しているメソッドである。つまりこのプロトコルは、シングルトンのUIApplicationオブジェクトのデリゲートによって実装されるメソッドを宣言し、それらのメソッドは、起動完了時・終了時、メモリの低下、重要な変更の発生など、アプリケーション実行中に置けるキーイベント(重要なイベント)を実行します。

application(_:didFinishLaunchingWithOptions:)とは

関数UIApplicationDelegateに含まれているメソッドのapplication(_:didFinishingWithOptions:)は起動プロセスがほぼ完了し、アプリを実行する準備がほぼ整ったことをデリゲートに伝えます。このメソッドを使用する場合、最後にBool値を返す必要がある。アプリがURLリソースを処理できないかユーザーアクティビティを続行できない場合はfalse、それ以外の場合はtrueを返します。リモート通知の結果としてアプリが起動された場合は戻り値は無視されます。

application(_:didFinishLaunchingWithOptions:)の中の三行について

//ウィンドウをインスタンス化する
self.window = UIWindow(frame: UIScreen.main.bounds)

//メインストーリーボードをロードし、その最初のView Controllerをインスタンス化します。
self.window?.rootViewController = UINavigationController(rootViewController: <表示したいViewContorollerをいれる>)

//新しいView ControllerをウィンドウのrootViewControllerプロパティに割り当ててから、ウィンドウを表示状態にします。
self.window?.makeKeyAndVisible()

上記のコードのように記されている通り、アプリケーションのメインストーリーボードファイルを作成し、それを情報プロパティリストファイルでメインストーリーボードファイルとして識別すると、iOSはいくつかのセットアップタスクを実行することができます。つまりは、起動後最初のViewを表示する動きをしているということです。

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Howasuto
iOSエンジニア
tresInnovation
当社は新しいアイディアから社会的意義のある新たな価値を創造し、社会に大きな変化をもたらす組織、社会の幅広い変革に貢献できるような会社を創る事をモットーにしております。VR事業、HR事業、EC事業、クリエイティブ事業、広告事業と多岐に渡る事業内容で世の中にワクワクを創造している会社です!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?