分配并初始化viewController后,是否会立即调用awakeFromNib
?
调用视图控制器的awakeFromNib
到底是什么精确点?
从我的调试会话中,我发现在执行awakeFromNib
之前,rootViewController的[self.window makeKeyAndVisible]
不会被调用。
答案 0 :(得分:43)
awakeFromNib
。保证视图将设置其所有插座实例变量。
编辑:详细的事件重新计算:
在实例化过程中,存档中的每个对象都是 取消归档,然后使用适合其类型的方法进行初始化。 Cocoa视图(以及可以使用。自定义的自定义视图) 相关的Interface Builder调色板)使用它们进行初始化 initWithCoder:方法。自定义视图使用它们初始化 initWithFrame:方法。已经实例化的自定义类 使用init方法初始化nib。
一旦所有对象都被实例化并从中初始化 存档,nib加载代码尝试重新建立连接 在每个对象的出口和相应的目标对象之间。如果 您的自定义对象具有出口,NSNib对象尝试 重新建立您在Interface Builder中创建的任何连接。它 首先尝试使用对象自己建立连接 方法首先。对于需要连接的每个插座,NSNib object在您的对象中查找setOutletName:形式的方法。 如果该方法存在,NSNib对象将调用它,并传递目标 对象作为参数。如果你没有用它定义一个setter方法 确切的名称,NSNib对象在对象中搜索实例 变量(类型为IBOutlet id),带有相应的插座名称和 尝试直接设置其值。如果一个实例变量带有 无法找到正确的名称,该连接的初始化确实如此 不会发生。 最后,在所有对象完全初始化后,每个 收到awakeFromNib消息。
编辑2 :这不适用于从故事板加载的视图控制器。
答案 1 :(得分:-3)
当编码器想加载一个尚未初始化的对象时。
Exp:UITableViewCell
中的控件将在代码调用awakeFromNib
时初始化,而不需要cellforrow
。