1

我觉得我们可以在下面两个地方写init代码

  • initwithNibName
  • viewDidLoad

有什么区别。

我想initWithNibName发生之前viewdidLoad,有什么情况我们必须在 init 中做一些事情initWithNibName

4

1 回答 1

2

initWithNibName将被首先调用。这是指定的初始化UIViewController;换句话说,无论您可能调用什么其他方法来 init a UIViewController,您最终都会调用到initWithNibName某个地方。例如,如果您只是调用[[UIViewController alloc] init],则默认行为是尝试加载与您的视图控制器类同名的 nib 文件。

viewDidLoad稍后在视图加载后调用。引用API 文档

在视图控制器将其视图层次结构加载到内存后调用此方法。无论视图层次结构是从 nib 文件加载还是在 loadView 方法中以编程方式创建,都会调用此方法。您通常覆盖此方法以对从 nib 文件加载的视图执行额外的初始化。

仔细阅读UIViewController 文档以获得更清晰的理解。

什么去哪里?

进入的代码类型与initWithNibName任何init方法相同:通常设置任何必要的属性。

至于viewDidLoad,在这里您可能会放置在视图层次结构加载到内存后需要运行的代码。例如,如果您想以编程方式对UIView控制器负责的 a 执行某些操作,请在此处执行,因为 UIView 在init调用时并未加载到内存中。

一个常见的错误是人们试图self.view在方法中向(或子视图)发送消息,initWithNibName并想知道为什么它没有效果。它没有效果,因为self.view此时它是 nil !

于 2013-11-06T10:55:00.410 回答