35

分配和初始化 viewController 后是否awakeFromNib立即调用?awakeFromNib视图控制器的确切点是在什么时候被调用的?从我的调试会话中,我看到awakeFromNibrootViewController 在执行之前不会被调用[self.window makeKeyAndVisible]

4

2 回答 2

49

awakeFromNib在视图及其子视图被分配和初始化后被调用。保证视图将设置其所有出口实例变量。

编辑:事件的详细叙述:

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

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

资源

编辑 2:这不适用于从情节提要加载的视图控制器。

于 2012-02-03T01:04:56.777 回答
-3

当编码器想要加载一个它还没有初始化的对象时。

Exp:当代码调用不需要时,控件UITableViewCell将初始化。awakeFromNibcellforrow

于 2014-02-12T06:54:30.773 回答