我认为我们可以在以下两个地方编写初始化代码
initwithNibName
viewDidLoad
有什么区别。
我认为initWithNibName
发生在viewdidLoad
之前,我们必须在initWithNibName
中做一些初始化的事情吗?
答案 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
为零!