简体   繁体   English

awakeFromNib vs奥特莱斯-在我们叫awakeFromNib时设置奥特莱斯和商店

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

I'm trying to understand a view controller's lifecycle and I've read a few contradictory statements about awakeFromNib . 我试图了解视图控制器的生命周期,并且阅读了一些有关awakeFromNib矛盾声明。 The docs say that all outlets should be set in awakeFromNib but I see that it's not always true . 文档说所有插座都应该在awakeFromNib设置,但我发现并非总是如此 What is the call's order between awakeFromNib , prepareForSegue and when do the outlets become available? awakeFromNibprepareForSegue和出口何时可用之间的呼叫顺序是什么?

Your view controller and its view hierarchy are loaded from separate nib files at runtime. 您的视图控制器及其视图层次结构是在运行时从单独的nib文件加载的。 Outlets to the view hierarchy aren't connected until the view hierarchy is loaded, which happens after the view controller is loaded. 在加载视图层次结构之前,不会连接到视图层次结构的出口,这是在加载视图控制器之后发生的。 (I have explained this in more depth in this answer .) (我已经在这个答案中更深入地解释了这一点 。)

Let's say you have a “master” view controller in a navigation controller. 假设您在导航控制器中有一个“主”视图控制器。 The master view controller performs a segue to push a “detail” view controller. 主视图控制器执行搜索以推送“详细”视图控制器。 Here's the order of events: 这是事件的顺序:

  1. Detail view controller is loaded from its nib. 细节视图控制器从其笔尖加载。 If the storyboard scene contains other top-level objects, these are also loaded. 如果情节提要场景中包含其他顶级对象,则也会加载这些对象。

  2. Detail view controller receives awakeFromNib : detail view controller's outlets to other top-level objects in the scene are connected, but outlets to the view hierarchy are not. awakeFromNib视图控制器接收awakeFromNibawakeFromNib视图控制器到场景中其他顶级对象的出口已连接,但未连接到视图层次结构。

  3. Master view controller receives prepareForSegue with the segue pointing at the detail view controller. 主视图控制器接收prepareForSegue ,并且segue指向详细视图控制器。

  4. Segue asks navigation controller to push detail view controller. Segue要求导航控制器推送细节视图控制器。

  5. Navigation controller asks detail view controller for its view, to add to the navigation controller's view hierarchy. 导航控制器向详细视图控制器请求其视图,以添加到导航控制器的视图层次结构中。

  6. Detail view controller loads its view hierarchy nib. 细节视图控制器加载其视图层次结构笔尖。 This connects the detail view controller's outlets to its view hierarchy. 这会将详细视图控制器的出口连接到其视图层次结构。

  7. All objects in the view hierarchy receive awakeFromNib . 视图层次结构中的所有对象都接收awakeFromNib

  8. Detail view controller receives viewDidLoad . 详细视图控制器接收viewDidLoad

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM