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

Posted

技术标签:

【中文标题】iOS:如何知道 viewDidLoad 是不是被调用?【英文标题】:iOS: How to know if viewDidLoad got called?iOS:如何知道 viewDidLoad 是否被调用? 【发布时间】:2013-10-18 21:03:37 【问题描述】:

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

每次我的视图进入活动状态时,我都需要更改视图属性,但如果视图尚未加载,我不想过早触发 viewDidLoad:。如果无法轻松判断 viewDidLoad: 是否已被调用,我只需在视图控制器初始化中添加一个名为 loaded 的 BOOL 设置为 NO,然后在进入活动状态后更改视图属性loaded 为 YES 或在 viewWillAppear 中:如果 loaded 为 NO 然后设置为 YES。

【问题讨论】:

【参考方案1】:

使用isViewLoaded。除此之外,它完全符合您的要求,没有太多可说的。文档很简单:

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

【讨论】:

【参考方案2】:

也许你应该在viewDidLoad 中初始化你的UIView,然后在viewWillLayoutSubviews 中以任何你需要的方式改变它。

【讨论】:

【参考方案3】:

这是对这个问题的迂腐回答。如果你想知道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 之前的版本)上,视图可以在视图控制器的生命周期内多次卸载和重新加载。 old 行为请参阅非常漂亮的 Big Nerd Ranch 视图生命周期图。在 iOS 6+ 中几乎相同,只是视图在内存不足的情况下不会卸载并且viewDidUnload 不会被调用:

【讨论】:

以上是关于iOS:如何知道 viewDidLoad 是不是被调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS8 的 viewDidLoad() 中调用此函数

ios - 如何知道第二个控制器是不是被解雇?

iOS如何判断屏幕是不是被点击

ViewDidLoad 不断在 UIPageViewController 上被调用

如何检测 iOS UIViewController 是不是被交互或触摸

在目标 c ios 中保留 viewDidLoad 之外的数据