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有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
单元测试(Kiwi):调用 loadView 和 viewDidLoad 后,测试中的属性始终为零
为啥loadview中的self.view.tag和其他的不一样