2016-10-05 1 views
1

私はViewControllersを初期化するために、常にviewDidLoadを使用しました。ほとんどの場合、Apple'sのマニュアルで示唆されているように、ビューの追加初期化を実行します。ただし、特定の作業を行うのに役立つviewDidLoadのモデルオブジェクトの場合は、initialiseのオブジェクトもあります。ここでは例のコードは次のとおりです。UIViewControllerを作成するときにinit()を使用するタイミングは?

override fun viewDidLoad() 
{ 
    super.viewDidLoad() 

    // Initialisation of my views 
    self.label.text = "text" 
    self.imageView.image = UIImage(named: "image") 
    etc. 
    . 
    . 

    // Initialisation of my models 
    self.videoRecorder = VideoRecorder() 
    etc. 
    . 
    . 
} 

私は今それについて考えるとき、それはモデルの初期化にViewControllerinit方法を置くために多くの意味がありませんか?

私の質問は明らかと思われる場合、私は、しかし、私は、私が見た中で最もiOSのチュートリアルでは、人々は唯一viewDidLoad方法でinitialisationを実行する傾向があることが判明し、事前にお詫び申し上げます。

ご協力いただきありがとうございます。

答えて

3

人が通常これをしない理由は、ビューコントローラがストーリーボードやxibファイルからインスタンス化されることが多いからです。その場合、普通のinitとは呼ばれません。代わりにinitiWithCoder:が使用され、それに応じてIBOutletとマークされたプロパティが設定されます。

このは非常にで、IBOutletで設定される傾向があるため、多くの場合、初期化プロパティが冗長になります。

initで使用しているときにもView Controllerを正常に動作させたい場合は、ストーリーボードから使用したときに問題が発生しないように注意してください。ほとんどの場合、initinitWithCoder:の両方を実装する必要があります。私はinitに設定されたプロパティが(コントローラをストーリーボードからロードするときに)viewDidLoadにあることを期待しているため、多くの人が問題に遭遇しているのを見ました。

このため、ほとんどのプログラマはinitを気にしなくて、viewDidLoadに依存しています。これは間違いなくいつでも呼び出されるためです。適切な "両方の方法で使用可能な"コントローラを書くことはちょっとだけコードです。

0

一般に、コンストラクタ(init())でタスクを実行することはお勧めしません。しかし、ViewControllerのプロパティであるオブジェクトを作成することは単純な初期化と考えることができるので、init()で行うことは問題ありません。

それぞれのケースは、作成するモデルの性質とその責任に応じて個別に検討する必要があります。

サムルールは次のとおりです。タスクの実行 - いいえ、プロパティの初期化 - はい

0

segueから渡されたデータを使用してviewController変数を初期化する場合は、initの代わりにviewDidLoadで行うのが(私の個人的な経験から)うまく機能します。 initから初期化しようとすると、viewControllerはsegueから渡された値を取得しませんでした。

関連する問題