iphone - viewDidLoad 和 awakeFromNib 时序

标签 iphone ipad uitableview viewdidload awakefromnib

据我了解,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/

相关文章:

c# - SQLite问题“无法打开数据库文件”

ios - 在 GameScene 中定位 SKSpriteNode

ios - 不同版本的 UIScrollView - iOS

swift - 如何在两个彼此相等的变量上过滤 UITableViewCell

objective-c - 我可以检测父类中的 UITableView 委托(delegate)吗?

iOS:将 UITableView 渲染成 PDF

ios - 处理来自锁定屏幕的来电时,iOS VoIP CallKit 应用程序出现问题

iphone - 在 iPhone 中绘制高尔夫球 field 图

iphone - 弧在圆上的位置

ios - 如何将水平 UICollectionView 的第一个和最后一个单元格居中?