2

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

  1. 添加初始化。此答案中的示例
  2. 加入ViewDidLoad在这个答案中建议

哪一个是当前的最佳实践?第二个答案似乎更老(2010),所以我想知道它是否是一个旧的,不再建议的做法?

4

2 回答 2

8

不,永远不要在 init 中做这样的事情。

我 viewDidLoad 甚至 viewWillAppear,从来没有在 init 中,因为你的视图当时可能不存在,当我开始时,它一直发生在我身上,我正在为一个不存在的 UILabel 设置一些字符串并导致应用程序崩溃,但这在模拟器中有效,因为它比 iPhone 3 等实际设备快得多。

与重置数据和关闭委托相同,不应在 dealloc 中设置。当您认为会调用时,可能不会调用 Dealloc。您应该在 viewWillDissapear 或 viewWillUnload 中设置此类操作。

于 2013-09-05T11:21:26.177 回答
7

对于非基于 XIB 的视图控制器,正确的位置是在-loadView. -loadView负责初始化视图控制器的view属性,包括任何子视图。系统会在适当的时候调用这个方法。view您必须在此方法中为视图控制器的属性分配一些东西:

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

    self.view = view;
}

如果你有一个基于 XIB 的视图控制器,文档说不要覆盖-loadView. 在这种情况下,您应该在-viewDidLoad.

于 2013-09-05T11:26:32.523 回答