我应该以编程方式在init或ViewDidLoad中添加子视图,为什么?

我一直在浏览一些答案,我得到了两个不同的build议:

  1. 在init中添加。 这个答案的例子
  2. 添加在ViewDidLoad 。 build议在这个答案

哪一个是目前的最佳做法? 第二个答案似乎比较老(2010年),所以我想知道这是不是一个老的,不再被提出的做法?

对于非基于XIB的视图控制器,正确的位置是在-loadView-loadView负责初始化视图控制器的view属性,包括任何子视图。 系统会在适当的时候调用这个方法。 你必须给这个方法里的视图控制器的view属性赋值:

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

如果您有一个基于XIB的视图控制器,文档说不覆盖-loadView 。 在这种情况下,您应该在-viewDidLoad执行额外的视图初始化工作。

不,从来没有在初始化这样的东西。

我viewDidLoad甚至viewWillAppear,从来没有在初始化,因为你的看法可能不在那里,当我开始时,我一直在设置一些string到一个UILabel不在那里,使应用程序崩溃,但是这在模拟器中工作,因为它比iPhone 3这样的实际设备要快得多。

与重置数据和closures代表一样,不应该在dealloc中设置。 当你想到的时候,Dealloc可能不会被调用。 您应该在viewWillDissapear或viewWillUnload中设置这样的操作。