我觉得我们可以在下面两个地方写init代码
initwithNibName
viewDidLoad
有什么区别。
我想initWithNibName
发生之前viewdidLoad
,有什么情况我们必须在 init 中做一些事情initWithNibName
?
我觉得我们可以在下面两个地方写init代码
initwithNibName
viewDidLoad
有什么区别。
我想initWithNibName
发生之前viewdidLoad
,有什么情况我们必须在 init 中做一些事情initWithNibName
?
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 !