awakeFromNib vs Outlets - 当我们调用 awakeFromNib 时设置 outlets 和 segues

awakeFromNib vs Outlets - Do the outlets and segues set when we call awakeFromNib

我试图了解视图控制器的生命周期,但我读过一些关于 awakeFromNib 的相互矛盾的陈述。文档说所有出口都应该设置在 awakeFromNibI see that it's not always true。在 awakeFromNibprepareForSegue 和网点何时可用之间的通话顺序是什么?

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

假设您在导航控制器中有一个“主”视图控制器。主视图控制器执行 segue 以推送“详细信息”视图控制器。以下是活动顺序:

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

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

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

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

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

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

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

  8. 详细视图控制器接收 viewDidLoad.