awakeFromNib vs Outlets - 当我们调用awakeFromNib时,设置出口和segue

时间:2016-05-10 20:00:18

标签: ios swift uiviewcontroller lifecycle awakefromnib

我正在尝试理解视图控制器的生命周期,并且我已经阅读了一些关于awakeFromNib的矛盾陈述。文档说所有商店都应设置在awakeFromNibI see that it's not always trueawakeFromNibprepareForSegue之间的通话顺序是什么?这些网点何时可用?

1 个答案:

答案 0 :(得分:1)

您的视图控制器及其视图层次结构在运行时从单独的nib文件加载。在加载视图层次结构之前,视图层次结构的出口不会连接,这在加载视图控制器之后发生。 (我已经更深入地解释了这一点in this answer。)

假设您在导航控制器中有一个“主”视图控制器。主视图控制器执行segue以推送“细节”视图控制器。这是事件的顺序:

  1. 详细视图控制器从其笔尖加载。如果故事板场景包含其他顶级对象,则也会加载这些对象。

  2. 详细信息视图控制器接收awakeFromNib:详细视图控制器连接到场景中其他顶级对象的出口已连接,但未连接到视图层次结构的出口。

  3. 主视图控制器收到prepareForSegue,其中segue指向详细视图控制器。

  4. Segue要求导航控制器推送详细视图控制器。

  5. 导航控制器向详细视图控制器询问其视图,以添加到导航控制器的视图层次结构中。

  6. 详细信息视图控制器加载其视图层次结构nib。这将详细视图控制器的出口连接到其视图层次结构。

  7. 视图层次结构中的所有对象都会收到awakeFromNib

  8. 详情视图控制器会收到viewDidLoad