UIViewController初始化代码:initWithNibName和viewDidLoad之间的区别

时间:2013-11-06 10:49:20

标签: objective-c xcode

我认为我们可以在以下两个地方编写初始化代码

  • initwithNibName
  • viewDidLoad

有什么区别。

我认为initWithNibName发生在viewdidLoad之前,我们必须在initWithNibName中做一些初始化的事情吗?

1 个答案:

答案 0 :(得分:2)

首先会调用

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

加载视图后,稍后会调用

viewDidLoad。引用API docs

  

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

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

什么地方?

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

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

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