質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

5921閲覧

【iOS】viewDidLoad、viewWillAppearなどの使い方について

nyancoro

総合スコア75

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/08/08 06:49

編集2015/08/08 06:50

いつもお世話になっております。

viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappearという呼ばれるタイミングの異なるメソッドがあるのは知っているのですが、
実際どのようなときに使い分けが必要になるのかがわかりません。
(私はviewDidLoad内で全ての処理を行ってしまっており、それで今のところ問題が出ていないので特に・・・)
手の込んだものを作るようになると、使い分けるのが必須になってくるのでしょうか?

またviewDidLoadに関して、
「Viewが表示される最初の1回だけ呼ばれるもの」と理解しているのですが、
たとえばA画面からB画面に遷移して、B画面に設置したUIBottunを押してA画面に戻ったとき、
A画面のviewDidLoad内の処理も再び行われているのは何故なのでしょうか?
viewDidAppearが呼ばれるのは理解できるのですが、viewDidLoadが呼ばれるのは腑に落ちません。

このあたり、教えて頂けると有り難いです。よろしくお願いしますm(__)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

たとえばA画面からB画面に遷移して、B画面に設置したUIBottunを押してA画面に戻ったとき、A画面のviewDidLoad内の処理も再び行われているのは何故なのでしょうか?

それは本当に戻ってますか? 新しくビューコントローラを生成していませんか?
おっしゃる通り、viewDidLoadは生成時に一度だけ呼び出される処理です。
もし画面を表示する度に呼び出されているのであれば、おそらく毎回生成してしまっているものと思います。

また各種メソッドの使い分けですが、viewDidLoadはビューが生成されたあとに一度だけ呼び出されます。
なので、ビューに関するセットアップをするのに適しています。

一方、viewWillAppearviewDidAppearはビューが表示される/されたときに毎回呼び出されます。
なので、例えば別の画面でなにか情報が更新され、ビューが戻った際にそれを反映しておきたい、といった場合などに使うといいでしょう。

ただこれはあくまで利用例なので、画面が表示されるタイミングでなにかしたい、というときに利用するメソッドです。

そして最後のviewWillDisappearviewDidDisappearは画面が非表示になる/なったときに呼び出されます。
これもまた、画面が別画面で隠されるときなどにやりたい処理があるときなどに利用するといいでしょう。
(例えばWebViewを利用している場合はロードを中断して通信量を抑える、とか)

投稿2015/08/08 07:48

edo_m18

総合スコア2283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyancoro

2015/08/08 18:00

ご回答ありがとうございます。 確認してみたところ、仰るとおり、新しくビューコントローラを生成してしまっておりました。気づかせていただき感謝しています>< 重ねての質問で申し訳ないのですが、ビューコントローラを毎回生成してしまうことのデメリットは何なのでしょうか?m(__)m
edo_m18

2015/08/09 15:11

場合によりけりだと思います。 ただ、質問内容からさっするに、毎回生成するつもりがなく生成されているということは、今は問題なくとも今後バグになる可能性もありますし、場合によってはメモリリークの危険もはらんでいるかもしれません。 「ビューコントローラを毎回生成している」というだけであれば大きな問題はないかもしれませんが、上記のように「意図していない」ことのほうが問題だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問