我正在尝试理解视图控制器的生命周期,并且我已经阅读了一些关于awakeFromNib
的矛盾陈述。文档说所有商店都应设置在awakeFromNib
但I see that it's not always true。 awakeFromNib
,prepareForSegue
之间的通话顺序是什么?这些网点何时可用?
答案 0 :(得分:1)
您的视图控制器及其视图层次结构在运行时从单独的nib文件加载。在加载视图层次结构之前,视图层次结构的出口不会连接,这在加载视图控制器之后发生。 (我已经更深入地解释了这一点in this answer。)
假设您在导航控制器中有一个“主”视图控制器。主视图控制器执行segue以推送“细节”视图控制器。这是事件的顺序:
详细视图控制器从其笔尖加载。如果故事板场景包含其他顶级对象,则也会加载这些对象。
详细信息视图控制器接收awakeFromNib
:详细视图控制器连接到场景中其他顶级对象的出口已连接,但未连接到视图层次结构的出口。
主视图控制器收到prepareForSegue
,其中segue指向详细视图控制器。
Segue要求导航控制器推送详细视图控制器。
导航控制器向详细视图控制器询问其视图,以添加到导航控制器的视图层次结构中。
详细信息视图控制器加载其视图层次结构nib。这将详细视图控制器的出口连接到其视图层次结构。
视图层次结构中的所有对象都会收到awakeFromNib
。
详情视图控制器会收到viewDidLoad
。