在initWithNibName之后调用ViewDidLoad

liv*_*m95 1 iphone cocoa-touch

看起来ViewDidLoad()只有在物理显示View(即通过NavigationController pushViewController)之后才会发送到ViewController,而不是紧接着initWithNibName().这是我可以依赖的行为吗?我想有机会设置我的视图的成员变量,以便在ViewDidLoad()调用时调用所有成员.

Jaa*_*nus 7

您可以在initWithNibName中设置成员变量和其他类似的东西:bundle : .

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
    if (self = [super initWithNibName:nibName bundle:nibBundle]) {
        // set up ivars and other stuff here.
        someIvar = someValue;
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

你是正确的viewDidLoad:仅在物理显示视图时发送,即当它被添加到某个可见视图时(如果用户没有到达该视图,有时可能永远不会发送).因此,分割功能并考虑在初始时可以执行的操作以及在视图加载时发生的情况是很有用的.

正如Marcelo Cantos在评论中指出的那样,viewDidLoad:通常是使用"延迟加载"概念进行各种设置工作的好地方,因此您可以将设置推迟到尽可能晚的时间.

  • 如果每次视图*出现时都需要初始化变量*(而不是仅在加载时),还要考虑覆盖viewWillAppear (2认同)