Swift中awakeFromNib()和viewDidLoad()的区别

35

我想知道awakeFromNib()和viewDidLoad()之间的关键区别,以更清楚地了解它们的工作原理。请问有人能解释一下吗?


可能是Which should I use, -awakeFromNib or -viewDidLoad?的重复问题。 - vard
可能是Explain awakeFromNib, initwithFrame usage的重复问题。 - mattt
1个回答

30

从苹果文档中得知:

awakeFromNib

nib加载基础设施会向从xib归档文件中重新创建的每个对象发送一个awakeFromNib消息,但是只有在归档文件中的所有对象都被加载和初始化后才会发送此消息。当一个对象接收到awakeFromNib消息时,保证它已经拥有所有的插座连接(outlet)和动作连接(action)。

参见:资源编程指南中的XIB文件

viewDidLoad

该方法在视图控制器将其视图层次结构加载到内存后调用。无论视图层次结构是从nib文件加载还是在loadView方法中以编程方式创建,都会调用此方法。通常,您会重写此方法来对从nib文件中加载的视图执行其他初始化工作。


9
awakeFromNib 在 viewDidLoad 之前被调用了吗? - sriram hegde
2
请注意,awakeFromNib:可能不会被调用。 - zaph
2
那么对于这个问题(http://stackoverflow.com/questions/36673624/manipulate-ib-outlets-in-awakefromnib-for-uicollectionviewcell-even-if-not-using),awakeFromNib是否是操作IB插座的正确位置?基本上,该问题询问如果*不*使用自定义XIB,则在哪里初始化UICollectionViewCell的插座? - Crashalot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接