viewDidLoad(), LoadView()

16
viewDidLoad()loadView()有什么区别?它们之间的区别是什么?
在不使用XIB开发应用程序时,哪个更好?
谢谢。

请尝试此链接https://dev59.com/3XRB5IYBdhLWcg3wn4QL - visakh7
7个回答

54

ViewDidLoad 在视图加载完成后调用,而 loadView 在加载开始时调用。

当您创建一个新项目时,您会在这些方法上看到注释,清楚地指出应该在何时使用哪个函数。

请参见此处。

/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/


/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/

这些评论清晰易懂。


16
viewDidLoad()

当您从NIB加载视图并希望在启动后执行任何自定义操作时,应使用此方法。

LoadView()

当您想要在不使用Interface Builder的情况下以编程方式创建视图时,应使用它。


7
如果您打算使用IB来构建UI,则应在viewDidLoad中进行所有后期IB初始化。如果使用nib来初始化控制器,则该类根本不会调用loadView。
如果您在代码中初始化控制器,则viewController将首先调用loadView,然后调用viewDidLoad。您可以根据自己的喜好在loadView或viewDidLoad中进行所有初始化。
但是,如果您决定使用loadView,请确保在尝试读取self.view之前设置view属性,否则您将进入无限循环并崩溃。

根据文档,您不应调用[super loadView];相反,您应该自己设置view属性。 - user102008
修改了我的答案。UIViewController的loadView是为了初始化一个空白视图。我认为如果用户的实现取消超级设置的视图,那可能会浪费资源,但不会有害。 - futureelite7

2
如果您从stroyboard或xib文件初始化视图,请不要覆盖此方法或在其中调用[super loadView]。 如果您在该方法中调用[super loadView],则最好永远不要覆盖此方法,并将以下代码放入您的viewDidLoad方法中。
如果您以编程方式初始化视图,则绝不能调用[super loadView]。您必须将您的rootView分配给self.view属性,否则可能会导致完美的崩溃。

0

这不是很明显吗?

viewDidLoad在视图完成加载时被调用。

loadView在视图被要求加载时被调用。

两者都没有更好或更差的。这完全取决于您的设计。

祝你好运 :)


1
并不是很有答案。正如其他答案所述,关键的区别在于您是(a)使用xib / nib还是(b)以编程方式创建用户界面。 - Basil Bourque

0

视图控制器会从与其关联的nib文件中加载其视图,如果没有关联的nib文件,则会自动调用其loadView()方法来填充其视图。 在这种情况下,您需要实现loadView()方法。 默认情况下,它返回nil。

当您的视图加载到内存中时,viewDidLoad()方法会被调用,在这里您可以根据需要进行自定义初始化。


-7

如果您正在开发应用程序而没有使用xib,则会调用LoadView()方法,如果有xib,则会调用ViewDidLoad方法。

因此最好使用LoadView方法。


9
这不是真的。无论如何,ViewDidLoad都会被调用。 - MobileMon
但是当我把代码写在ViewDidLoad中时,它也能正常工作!请解释一下为什么会这样。(我没有使用任何故事板) - Rizwan Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接