iOS:如何知道viewDidLoad是否被调用?

时间:2013-10-18 21:03:38

标签: iphone ios uiviewcontroller viewdidload viewwillappear

是否有BOOL或其他方式知道是否已调用viewDidLoad:?

每次我的视图进入活动状态时,我都需要更改一个视图属性,但是如果视图还没有被加载,我不想过早地触发viewDidLoad:。如果无法轻易告诉viewDidLoad:是否已被调用,我只需在视图控制器init中添加一个名为 loaded 的BOOL设置为NO,然后在输入的活动后更改视图属性if 已加载为YES或在viewWillAppear中:如果已加载为否,则将加载设置为YES。

3 个答案:

答案 0 :(得分:51)

使用isViewLoaded。除此之外,它完全符合您的要求,关于它的说法并不多。文档简单如下:

  

调用此方法会报告视图是否已加载。不像   view属性,如果不是,则不会尝试加载视图   已经在记忆中了。

答案 1 :(得分:1)

也许您应该在viewDidLoad中初始化您的UIView,然后以viewWillLayoutSubviews内的任何方式更改它。

答案 2 :(得分:1)

这是这个问题的迂腐答案。如果您想知道何时触发viewDidLoad,则必须在视图控制器中实施viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    viewDidLoadCalled = YES; // Not actually the best way to do this...
    // Set up more view properties
}

但正如汤米所说,你实际上需要使用isViewLoaded。这解决了像

这样的检查问题
if (!self.view) {
    // do something
}

由于询问而无意中加载了视图。

请注意,在调用viewWillAppear:时,视图将始终加载。此外,在较旧的(iOS 6之前的版本)版本中,视图可以在视图控制器的生命周期内卸载并重新加载多次。请参阅非常好的Big Nerd Ranch视图生命周期图,了解行为。它在iOS 6+中几乎相同,只是在低内存条件下视图不会卸载并且viewDidUnload不会被调用:

enter image description here