2

ここでいくつかの回答を閲覧してきましたが、2 つの異なる提案が得られました。

  1. init に追加します。この回答の例
  2. 追加しViewDidLoadます。この回答で提案

現在のベストプラクティスはどれですか? 2番目の答えは古い(2010年)ようですので、それは古い、もはや推奨されていない慣習なのだろうか?

4

2 に答える 2

8

いいえ、init でそのようなことを行うことはありません。

私はviewDidLoadまたはviewWillAppearでさえ、あなたのビューがその時点でそこにない可能性があるため、initでは決してありません。私が始めたときに、そこにないUILabelに文字列を設定していて、アプリをクラッシュさせました。 iPhone 3 のような実際のデバイスよりもはるかに高速であるため、これはシミュレーターで機能しました。

データをリセットしてデリゲートを閉じる場合と同じで、dealloc で設定しないでください。Dealloc は、呼び出されると思っても呼び出されない場合があります。このような操作は、viewWillDissapear または viewWillUnload 内で設定する必要があります。

于 2013-09-05T11:21:26.177 に答える
7

For a non-XIB-based view controller, the correct place is in -loadView. -loadView is responsible for initializing a view controller's view property, including any subviews. The system will call this method at the appropriate time. You must assign something to the view controller's view property inside this method:

 - (void)loadView
{
    UIView *view = ...;
    // create additional views here

    self.view = view;
}

If you have a XIB-based view controller, the documentation says not to override -loadView. In this case, you should do additional view initialized work in -viewDidLoad.

于 2013-09-05T11:26:32.523 に答える