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() 中调用此函数
ViewDidLoad 不断在 UIPageViewController 上被调用