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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

2回答

1566閲覧

[Swift] VCのライフサイクルメソッドのsuperの意味

morizoo-

総合スコア65

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2017/02/10 02:53

超・初歩的な質問です。

UIViewControllerのライフサイクルメソッド(viewDidLoadとか)でいつもsuper.viewDidLoad()とか書きますが、これって意味あるのでしょうか?
試しにコメントアウトしてみたのですが、動作には何の影響もありませんでした。

この文は省略可能なのでしょうか?
また、省略可能であればそのロジック又は(ライフサイクルメソッドを定義している)コードの参照方法をご教授頂きたいです。

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

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

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

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

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

guest

回答2

0

直接的な回答ではありません。
デザインパターン系の書籍を読むと良いのではないでしょうか。

投稿2017/02/10 06:10

t_obara

総合スコア5488

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

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

morizoo-

2017/02/10 06:39

ご回答ありがとうございます! デザインパターンに該当するのですね。 それなりに種類があるようですが、おすすめの書籍がありましたらご教授頂いても宜しいでしょうか?
morizoo-

2017/02/10 08:42

比較的読みやすそうですね(amazonレビューから)。 デザインパターンに関しての書籍は読んだことが無かったので丁度よかったです、 ご回答ありがとうございました!
guest

0

ベストアンサー

UIViewControllerのviewDidLoadは何もしていない(らしい)ですが、

  • 親クラスが何かしているから呼び出す
  • 親クラスが何もしていないから呼び出さない

なんて場合分けする必要はなく、常に呼び出しておけばいいのです。

投稿2017/02/10 04:38

編集2017/02/10 04:39
fuzzball

総合スコア16731

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

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

morizoo-

2017/02/10 04:57

ご回答ありがとうございます! 意見よろしいでしょうか? >常に呼び出しておけばいい そういうものなのですか?今回は`viewDidLoad()`だったので見たらすぐ分かるものでしたが、例えば自作クラスの何もしない関数をそのサブクラスでoverrideする場合、superで呼び出していると第三者からは「何かしているんだな」と判断されそうです。 調べればすぐ分かるかもしれませんし、どちらにしろ確認はするのでしょうが、呼び出さずにただ上書きしているんだぜと明示化した方が良いんじゃないかなと思いました。
fuzzball

2017/02/10 05:10 編集

>>`viewDidLoad()`だったので見たらすぐ分かるものでしたが 何がすぐに分かったのでしょうか? >>「何かしているんだな」と判断されそうです。 判断されて困ることがあるのでしょうか? >>どちらにしろ確認はするのでしょうが いや、だから確認する必要は無いと言っているのですが。 ところで、あなたは「UIViewControllerのviewDidLoadが何もしていない」という公式なドキュメントを見つけましたか?
morizoo-

2017/02/10 06:23

言葉足らずで申し訳ございません。 >>`viewDidLoad()`だったので見たらすぐ分かるものでしたが `viewDidLoad()`の挙動のことです。自作クラスと違い公式のものなのでコードを直接見なくても分かる、という意味で書きました。 >>「何かしているんだな」と判断されそうです。 基本的に勘違いされる様なコードを書くのは良く無い、と考えているので(この場合、何もしていないのに何かしていると把握される)、好ましく無いかなと考えました。 >>どちらにしろ確認はするのでしょうが 定義内容(コード)の確認のつもりで書いたのですが、自作(未知の)親クラスのoverrideに対して「何かしている」と判断した場合も確認する必要はないのでしょうか? >>公式なドキュメントを見つけましたか? 申し訳ございません、確認しておりませんでした。Xcodeで提供されている'Help > Documentation and API Reference'でviewDidLoad()の文献を読んでみると "If you override this method, call this method on super at some point in your implementation in case a superclass also overrides this method." とありました。が、恥ずかしながら"a superclass also overrides this method"がどんな場面を示すのかいまいちわかりません。重ねて質問申し訳ないのですが、どういった場合が考えられるかご教授頂いても宜しいでしょうか?
fuzzball

2017/02/10 07:25 編集

Xcode7のヘルプではその文言を見つけることが出来ませんでした。どちらにしても正確に翻訳出来ないのでコメント出来ません。(英語は専門外) viewWillAppearやviewDidAppearには、「you must call super ...」と明記されていました。 もしかしたらviewDidLoadは呼ばなくてもいいのかも知れません。
morizoo-

2017/02/10 07:41

承知致しました、 たしかにviewWillAppear()とviewDidAppear()には「must call」と書いていますね(Xcode8.2.1ドキュメント)。viewDidLoad()も「must」ではありませんが呼び出すことを推奨している雰囲気なので、もう少し調べて見ますが当面はsuperで呼び出そうと思います。 お付き合い頂き誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問