关于viewController的"viewDidLoad"和"viewWillAppear"方法

App*_*Dev 6 uiviewcontroller viewdidload viewwillappear ios

我对这两个提到的方法有一个问题,因为在我的测试中我没有明确它们被称为的顺序.我认为,首先,viewDidLoad当viewController第一次加载时(如名称所示),并且在init方法之后立即调用.然后,我以为一旦viewDidLoad回来,viewWillAppear就会被召唤.如果你显示另一个viewController,然后你返回到这个,那么它应该已经加载,只会viewWillAppear被调用.

然而,在发展我做的印象是,没有订单时调用viewDidLoadviewWillAppear...我couldn't发现这个生命周期苹果公司的文件中的明确说明,这如何实际工作?

谢谢!

her*_*ube 19

我想补充Caleb的答案:不要混淆视图控制器和视图!该名称viewDidLoad清楚地表明在加载视图后调用该方法.它是视图控制器进行加载.

关于视图生命周期和消息发送顺序的一些指示:

  • 不是官方的Apple文档,但我觉得这个图非常有用,因为它包含了几乎所有UIViewController的生命周期覆盖.
  • 在Apple的"View Controller编程指南"的"视图控制器中的资源管理 "一节中,有一个流程图,描述了最初如何加载视图.它解释了,loadViewviewDidLoad与故事板一起使用.
  • Apple的"视图控制器编程指南"中的响应与显示相关的通知的部分解释了如何响应出现和消失的视图(viewWillAppear:等)
  • 如果您计划实现容器视图控制器:UIViewController类引用可以很好地概述子类需要如何发送消息.

我在这里停下来.您可以通过Google搜索"uiviewcontroller生命周期"找到更多自己的东西.

  • [UIViewController生命周期图](http://rdkw.wordpress.com/2013/02/24/ios-uiviewcontroller-lifecycle/)非常棒.谢谢你的链接. (2认同)

Cal*_*leb 9

-viewDidLoad在控制器加载其视图时调用,这不一定在初始化之后.视图控制器在需要它们之前不会加载它们的视图,无论是显示还是出于任何其他原因.

-viewWillAppear在视图显示之前调用.这将是之后-viewDidLoad,但你不确切知道多久之后.-viewWillAppear每次显示视图时调用; -viewDidLoad如果视图在某个时刻被卸载(例如didReceiveMemoryWarning),则只会被第二次调用.这些日子不寻常,但它可能发生.

或者,如果将viewController设置为nil,如果视图控制器从导航堆栈中踢出,通常会发生这种情况,因此下次将其带到导航堆栈时,它需要-viewDidLoad再次调用.