ライフサイクルの勉強

ライフサイクルについて

Xcodeのライフサイクルについて。
新規でXcodeプロジェクトを立ち上げると、ViewController.swiftファイルに
以下のコードがデフォルトで準備されてます

  override func viewDidLoad() {
        super.viewDidLoad()
   }

viewDidLoad”に、アプリ初回起動時の動作を書きます
単純なアプリの場合、このviewDidLoad”だけで事が足りると思います。


しかし、スマホ画面を消す、画面移動する、など、スマホ操作に応じて、細かくアプリの動作を変えたい場合は、viewDidLoadだけでは無理です

なぜならviewDidLoad”はアプリ起動時の1回しか実行されません。

言葉では説明しにくいので、以下のコードを全てコピペしてシミュレーターを実行してみてください
(それでも分からないと思うので、サンプルアプリを作っておきます)

import UIKit

class ViewController: UIViewController {

    //起動時はここから。基本はviewDidLoad使用
    override func loadView() {
        super.loadView()
        print("loadView 一番最初に呼ばれる")
        print("↓")
    }

    // 初回起動時1回だけ実行される処理を書く
    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad 初回起動時のみ呼ばれる 基本的にココでOK")
        print("↓")
    }

    // 画面に表示される直前に毎回呼ばれる
    override func viewWillAppear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewWillAppear 画面に表示される直前")
        print("↓")
    }

    //しょっちゅう呼ばれる
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        print("viewWillLayoutSubviews レイアウトの構築")
        print("↓")
       
    }
    
    // 画面に表示された直後に毎回呼ばれる
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear 画面に表示された直後")
        print("↓")
       
    }

    // 画面から非表示になる直前に毎回呼ばれる
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear 画面から非表示になる直前")
        print("↓")
    }

    // 画面から非表示になる直後に毎回呼ばれる
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear 画面から非表示になる直後")
        print("↓")
       
    }

    // メモリーが不足にてインスタンスが破棄される直前に呼ばれる
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        print("didReceiveMemoryWarning メモリーが不足")
        print("↓")
    }
}

サンプルアプリ

ストーリボードにラベルを1個配置して、ナビゲーションコントローラーで
画面遷移をする簡単なアプリです
アプリ起動時に「おはよう」と表示され、画面遷移から戻ると「こんばんわ」になって
再び遷移しても「こんばんわ」しか表示されません。
アプリを再起動すると「おはよう」が表示されます。

コードは以下です。ライフサイクルは
super.viewDidLoadsuper.viewDidDisappear だけ使ってます

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    // 初回起動時1回だけ実行される処理を書く
    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad 初回起動時のみ呼ばれる 基本的にココでOK")
        print("↓")
        label.text = "おはよう"
    }

    // 画面から非表示になる直後に毎回呼ばれる
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear 画面から非表示になる直後")
        print("↓")
        label.text = "こんばんわ"
       
    }
}

以上です。

コメント

タイトルとURLをコピーしました