![](/img/trans.png)
[英]init and initWithNibName are not called but viewDidLoad is called
[英]UIViewController init code: difference between initWithNibName and viewDidLoad
我想我们可以在以下两个地方编写init代码
initwithNibName
viewDidLoad
有什么区别。
我认为initWithNibName
发生在viewdidLoad
之前,我们必须在initWithNibName
做一些初始化的东西是什么情况?
首先调用initWithNibName
。 这是UIViewController
的指定初始化器; 换句话说,无论您调用什么其他方法来初始化UIViewController
,最终都会在某个地方调用initWithNibName
。 例如,如果只调用[[UIViewController alloc] init]
,则默认行为是尝试加载与视图控制器类同名的nib文件。
稍后在视图加载后调用viewDidLoad
。 引用API文档 :
在视图控制器将其视图层次结构加载到内存后调用此方法。 无论视图层次结构是从nib文件加载还是在loadView方法中以编程方式创建,都会调用此方法。 您通常会覆盖此方法以对从nib文件加载的视图执行其他初始化。
仔细阅读UIViewController
文档以获得更清晰的理解。
怎么回事?
进入initWithNibName
的代码类型与任何init
方法相同:通常设置任何必要的属性。
至于viewDidLoad
,在这里你可能会把视图层次结构加载到内存中时需要运行的代码。 例如,如果您想以编程方式对控制器负责的UIView
执行某些操作,则可以在此处执行此操作,因为在调用init
时UIView未加载到内存中。
一个常见的错误是人们尝试在initWithNibName
方法中向self.view
(或子视图)发送消息,并想知道为什么它没有效果。 它没有效果,因为self.view
在那时是零!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.