Objective c UIViewController初始化代码:initWithNibName和viewDidLoad之间的差异
我认为我们可以在以下两个地方编写init代码Objective c UIViewController初始化代码:initWithNibName和viewDidLoad之间的差异,objective-c,xcode,Objective C,Xcode,我认为我们可以在以下两个地方编写init代码 initwithNibName viewDidLoad 有什么区别 我认为initWithNibName发生在viewdidLoad之前,我们必须在initWithNibName中执行一些init操作,这是什么情况呢?将首先调用initWithNibName。这是UIViewController的指定初始化器;换句话说,无论您可能调用什么其他方法来初始化aUIViewController,最终都会在某个地方调用initWithNibName。 例
initwithNibName
viewDidLoad
我认为
initWithNibName
发生在viewdidLoad
之前,我们必须在initWithNibName
中执行一些init操作,这是什么情况呢?将首先调用initWithNibName
。这是UIViewController
的指定初始化器;换句话说,无论您可能调用什么其他方法来初始化aUIViewController
,最终都会在某个地方调用initWithNibName
。
例如,如果只调用[[UIViewController alloc]init]
,默认行为是尝试加载与视图控制器类同名的nib文件
viewDidLoad
稍后在加载视图后调用。引述:
此方法在视图控制器加载其视图后调用
将层次结构放入内存。无论
视图层次结构是从nib文件加载或通过编程方式创建的
在loadView方法中。您通常重写此方法以执行
对从nib文件加载的视图进行附加初始化
仔细阅读UIViewController
,以获得更清晰的理解
什么去哪里?
进入initWithNibName
的代码种类与任何init
方法的代码种类相同:通常设置任何必要的属性
至于viewDidLoad
,在这里,您可以将视图层次结构加载到内存后需要运行的代码放在这里。例如,如果希望以编程方式对控制器负责的UIView
执行某些操作,可以在此处执行,因为在调用init
时,UIView未加载到内存中
一个常见的错误是,人们试图在
initWithNibName
方法中将消息发送到self.view
(或子视图),并想知道为什么它没有效果。它没有效果,因为self.view
在该点为零 另外,您可以说,作为构造函数的init方法是一个很好的点,您可以在这里传递可以在viewDidLoad
中使用的参数。但由于将首先调用viewDidLoad
,因此在推送控制器时,您还可以定义自己的setter方法。我更喜欢构造函数的方式,因为它对现有选项有更好的概述;)“将首先调用viewDidLoad”?从来没有先打过电话。Init方法总是首先被调用。哦,我想我现在明白了。第一个意思是“如果条件‘push’为真,它将被调用”。您也可以说“将在控制器之后调用…”^^