awakeFromNib何时被调用?

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

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

编辑:事件的详细叙述:

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

一旦所有的对象都已经被实例化并且从档案库中被初始化,那么笔尖加载代码将尝试重新build立每个对象的出口和相应的目标对象之间的连接。 如果您的自定义对象具有插口,则NSNib对象会尝试重新创build在Interface Builder中创build的任何连接。 首先尝试使用对象自己的方法build立连接。 对于每个需要连接的出口,NSNib对象在对象中查找forms为setOutletName:的方法。 如果该方法存在,NSNib对象调用它,传递目标对象作为参数。 如果你没有用这个确切的名字定义一个setter方法,那么NSNib对象将search一个带有相应sockets名称的实例variables(typesIBOutlet id)并直接设置它的值。 如果找不到具有正确名称的实例variables,则不会发生该连接的初始化。 最后,在所有对象完全初始化之后,每个对象都会 收到一个awakeFromNib消息。

资源

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

编码器需要加载一个尚未初始化的对象。

Exp:当代码调用awakeFromNib时, UITableViewCell控件将被初始化,不需要cellforrow