loadView和viewDidLoad有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loadView和viewDidLoad有什么区别?相关的知识,希望对你有一定的参考价值。

我知道这里有一个看似完全相同的问题:iPhone SDK: what is the difference between loadView and viewDidLoad?但是,我已经阅读了这个问题,但仍未完全回答。我没有使用IB,因为UI是动态的。

因此,我应该创建self.view,然后在loadView中添加子视图。

或者我应该在loadView中创建self.view并在viewDidLoad中添加子视图?#

答案

从NIB加载视图并希望在启动后执行进一步的自定义时,请使用viewDidLoad。

如果要以编程方式(不使用Interface Builder)创建视图,请使用loadView。

另一答案

对于您的具体问题,您应该在viewDidLoad中添加子视图。因为,如果覆盖loadView,则必须执行所有作业,加载所有视图。

以下是Apple's documentation的解释:

加载周期中发生的步骤如下:

1.

  * Some part of your application asks for the view in the view

控制器的视图属性。

2.

  * If the view is not currently in memory, the view controller calls its loadView

方法。

3.

  * The loadView method does one of the following:

        If you override this method, your implementation is

负责创建所有必要的视图并为view属性分配非零值。

        If you do not override this method, the default implementation uses 

视图控制器的nibName和nibBundle属性,用于尝试从指定的nib文件加载视图。如果找不到指定的nib文件,它将查找名称与视图控制器类名称匹配的nib文件并加载该文件。

        If no nib file is available, the method creates an empty UIView object 

并将其分配给view属性。

4.

  * The view controller calls its viewDidLoad method to perform any

额外的加载时间任务。

另一答案

实际上非常简单。如果你在没有IB的情况下这样做,那么你的UIViewController的view属性是空的。所以将它设置为loadView!

我只在loadView上设置视图而没有别的。

除此之外,在viewDidLoad中做所有事情。这是一些例子:

- (void)loadView 
    CGRect frame = [[UIScreen mainScreen] applicationFrame];
    baseView = [[UIView alloc] initWithFrame:frame];
    [self setView:baseView];
    [baseView release];

而已!我做完。并且永远不会想要添加更多。然后在viewDidLoad中,我添加了我想要的所有子视图。

- (void)viewDidLoad 
    [super viewDidLoad];

    msg = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 50)];
    [msg setText:@"Your profile is empty!"];
    [[self view] addSubview:msg]; // hey, I have done my view at loadView, so I have it now
    [msg release];

我的理解可能是错的:)

另一答案

在viewDidLoad中添加子视图。这样你100%肯定比视图确实加载并准备好消费。

另一答案

loadView是实际设置视图的方法(设置所有出口,包括self.view)。

viewDidLoad你可以通过它的名字弄清楚。这是在加载视图(已设置所有插座)后调用的委托方法,它只是通知控制器它现在可以开始使用插座。

viewDidLoad:“在视图控制器将其关联的视图加载到内存中之后调用此方法。无论视图是存储在nib文件中还是以编程方式在loadView方法中创建,都会调用此方法。”

loadView:“如果手动创建视图,则必须覆盖此方法并使用它来创建视图。”

另一答案

使用qazxsw poi初始化视图和控件。如果您没有Nib / Xib并且希望ViewController具有自定义(而不是viewDidLoad)视图,请使用qazxsw poi。

另一答案

如果要自己创建视图,请仅使用loadView。

在使用界面构建器或init与nib之后不要使用loadView,因为这些操作已经在底层实现中调用了loadView。

此外,使用loadView时,请在执行任何其他设置之前先分配视图:

loadView

以上是关于loadView和viewDidLoad有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

loadView与viewDidLoad

理论知识整合笔记

单元测试(Kiwi):调用 loadView 和 viewDidLoad 后,测试中的属性始终为零

为啥loadview中的self.view.tag和其他的不一样

viewDidLoad, viewWillDisappear, viewWillAppear等区别及各自的加载顺序

UIViewController中的loadView方法