-1

私のプロジェクトでは、IBなしで、したがってnibファイルなしでUIViewControllersを作成しているため、表示されているかどうかに関係なく、すべてのコントローラーコンテンツがloadViewでプログラム的に作成されます。したがって、私は基本的に、loadView内のすべてのオブジェクトを「初期化」しています。これは正しいことですか?または、すべての初期化をinitWithNibName:bundleに入れる必要がありますか?

現状では、コントローラーのloadViewにUIViewサブビューのインスタンスを作成しています。

self.mySubView =  [[SubView alloc] initWithFrame:aframe];
[self.view addSubView:self.mySubView];
[self.mySubView release];

そのため、合成されたプロパティを使用して、これらのサブビューのいくつかをインスタンス化しています。また、私はイニシャライザーの内部にいないため、上記のようにアクセサーを呼び出してこれらのビューを作成しています。しかし、それでも、これは本質的に初期化コードであるように感じます。したがって、おそらく、アクセサーを介さずに、ivarでalloc / initを直接呼び出す必要があります。これにより、 initWithNibName:bundle:でこれを行う必要があると思います。

そして、loadViewでオブジェクトを初期化する権利がある場合:、alloc / initにアクセサーを実際に使用する必要がありますか?

何かご意見は?

4

1 に答える 1

0

が呼び出された時点initWithNibName:bundle:では (ここでは nib ファイルを使用していないと想定しています)、View Controller の制御されたビューはまだ作成されていません。初めてself.view参照されたときに作成されます。init メソッドではこれを行わないことをお勧めします。その結果、init メソッドでサブビューを作成しないことも良い習慣になります。

self.view何らかの方法で初めて参照さloadViewれると、ビュー コントローラーによってメソッドが自動的に呼び出されます。この時点で、制御されたビューをプログラムで作成するのはあなたの仕事です。メソッドでサブビューを作成することはまったく問題loadViewありません。私が提案した適切な方法に従っている場合は、作成する必要があります。ただし、制御されたビューを割り当てる目的でのみメソッド内で参照する必要があります。つまり、メソッド内で一度だけ参照する必要がありself.viewます。loadViewloadView

メソッドでこれを行うべきではありませんloadView

[self.view addSubView:self.mySubView];

これは、制御されたビューを作成するために呼び出されたメソッドを使用しているときに、制御されたビューを参照しているためです。self.view'loadView` メソッドで作成する必要があります。

代わりに、ローカル変数を使用して制御されたビューを作成し、そのローカル変数をメソッドself.viewの最後に割り当てます。loadView

于 2013-01-26T20:08:02.837 に答える