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