据我了解,awakeFromNib 始终会在 viewDidLoad 之前调用。
所以我有一个 UITableViewController 的子类,它是从 xib 文件中取消存档的。
我在里面定义了这两个方法:
- (void)awakeFromNib {
[super awakeFromNib];
NSLog(@"awake from nib");
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"view did load");
}
发生的情况是“view did load”在控制台中的“awake from nib”之前出现。我尝试在 [super awakeFromNib] 处使用断点,并反复按 F7(步入),令我惊讶的是,它在进入 awakeFromNib 内的第二行之前进入 -(void)viewDidLoad。
有人知道这是怎么回事吗?我在常规 UIViewController 的子类中做了完全相同的事情,并且日志语句是相反的,正如我最初预期的那样......
最佳答案
要了解这一事实,我建议您查看 loadNibNamed:owner:options:
NSBundle
的方法。
当您从 nib 初始化 View Controller 时,首先它会加载其中包含的 View ,然后根据 nib 设置文件所有者属性。当将文件所有者的 view
属性设置为已加载的 View 之一时,将调用 viewDidLoad
方法。当设置所有文件所有者导出和属性(包括 view
属性)时,会调用 awakeFromNib
。因此,viewDidLoad
的调用早于 awakeFromNib
是有道理的。
希望这会有所帮助
关于iphone - viewDidLoad 和 awakeFromNib 时序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302629/