awakeFromNib什么时候被调用?

时间:2012-02-03 00:59:26

标签: ios awakefromnib

分配并初始化viewController后,是否会立即调用awakeFromNib? 调用视图控制器的awakeFromNib到底是什么精确点? 从我的调试会话中,我发现在执行awakeFromNib之前,rootViewController的[self.window makeKeyAndVisible]不会被调用。

2 个答案:

答案 0 :(得分:43)

视图及其子视图分配和初始化后,将调用

awakeFromNib。保证视图将设置其所有插座实例变量。

编辑:详细的事件重新计算:

  

在实例化过程中,存档中的每个对象都是   取消归档,然后使用适合其类型的方法进行初始化。   Cocoa视图(以及可以使用。自定义的自定义视图)   相关的Interface Builder调色板)使用它们进行初始化   initWithCoder:方法。自定义视图使用它们初始化   initWithFrame:方法。已经实例化的自定义类   使用init方法初始化nib。

     

一旦所有对象都被实例化并从中初始化   存档,nib加载代码尝试重新建立连接   在每个对象的出口和相应的目标对象之间。如果   您的自定义对象具有出口,NSNib对象尝试   重新建立您在Interface Builder中创建的任何连接。它   首先尝试使用对象自己建立连接   方法首先。对于需要连接的每个插座,NSNib   object在您的对象中查找setOutletName:形式的方法。   如果该方法存在,NSNib对象将调用它,并传递目标   对象作为参数。如果你没有用它定义一个setter方法   确切的名称,NSNib对象在对象中搜索实例   变量(类型为IBOutlet id),带有相应的插座名称和   尝试直接设置其值。如果一个实例变量带有   无法找到正确的名称,该连接的初始化确实如此   不会发生。 最后,在所有对象完全初始化后,每个    收到awakeFromNib消息。

Source

编辑2 :这不适用于从故事板加载的视图控制器。

答案 1 :(得分:-3)

当编码器想加载一个尚未初始化的对象时。

Exp:UITableViewCell中的控件将在代码调用awakeFromNib时初始化,而不需要cellforrow