【问题标题】: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。
【问题讨论】:
标签:
iphone
ios
uiviewcontroller
viewdidload
viewwillappear
【解决方案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 不会被调用: