ライフサイクルについて
Xcodeのライフサイクルについて。
新規でXcodeプロジェクトを立ち上げると、ViewController.swiftファイルに
以下のコードがデフォルトで準備されてます
override func viewDidLoad() {
super.viewDidLoad()
}
“viewDidLoad”に、アプリ初回起動時の動作を書きます
単純なアプリの場合、この“viewDidLoad”だけで事が足りると思います。
しかし、スマホ画面を消す、画面移動する、など、スマホ操作に応じて、細かくアプリの動作を変えたい場合は、viewDidLoadだけでは無理です
言葉では説明しにくいので、以下のコードを全てコピペしてシミュレーターを実行してみてください
(それでも分からないと思うので、サンプルアプリを作っておきます)
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.viewDidLoad と super.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 = "こんばんわ"
}
}
以上です。
コメント