1

以下の2箇所にinitコードを書けると思います

  • initwithNibName
  • viewDidLoad

どのような違いがあります。

の前にinitWithNibName起こると思います。viewdidLoadinitWithNibName

4

1 に答える 1

2

initWithNibName最初に呼び出されます。これは の指定された初期化子ですUIViewController。言い換えれば、 init a を呼び出す他のメソッドに関係なく、最終的にどこかUIViewControllerへの呼び出しが発生します。initWithNibNameたとえば、 を呼び出すだけの場合[[UIViewController alloc] init]、デフォルトの動作では、View Controller クラスと同じ名前の nib ファイルをロードしようとします。

viewDidLoadビューがロードされた後、後で呼び出されます。API ドキュメントを引用するには:

このメソッドは、View Controller がそのビュー階層をメモリにロードした後に呼び出されます。このメソッドは、ビュー階層が nib ファイルからロードされたか、loadView メソッドでプログラムによって作成されたかに関係なく呼び出されます。通常、このメソッドをオーバーライドして、nib ファイルからロードされたビューで追加の初期化を実行します。

UIViewController ドキュメントを注意深く読んで、より明確に理解してください。

何がどこに行くの?

入るコードの種類はinitWithNibName、どのメソッドでも同じですinit。通常、必要なプロパティを設定します。

に関してはviewDidLoad、ビュー階層がメモリにロードされたら実行する必要があるコードをここに入れることができます。たとえば、コントローラーが担当する何かをプログラムで実行したい場合は、ここで実行します。これは、UIViewが呼び出さUIViewれた時点でメモリにロードされていないためです。init

self.viewよくある間違いは、メソッド内の (またはサブビュー) にメッセージを送信しようとして、initWithNibNameなぜ効果がないのか不思議に思うことです。self.viewその時点で nil であるため、効果はありません。

于 2013-11-06T10:55:00.410 に答える