使用loadView时未调用viewDidLoad

sol*_*sol 3 iphone xcode objective-c viewdidload loadview

任何人都可以解释为什么在使用loadView时不会调用viewDidLoad?我的理解是viewDidLoad应该仍然被调用.

- (void)loadView
{
    CGRect currentFrame = [[UIScreen mainScreen] applicationFrame];

    UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
    myView.backgroundColor = [UIColor redColor];

    self.view = myView;
    [myView release];

    [super loadView];
}

- (void)viewDidLoad {

    //this never happens
    NSLog(@"VIEW DID LOAD!");
    [super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)

Pio*_*pla 7

我刚刚发现,如果在应用程序中手动调用loadView,则不会调用viewDidLoad.如果手动调用loadView,则还必须手动调用viewDidLoad.

根据apple docs,您不应该调用[super loadView],因为它会使用默认的UIView覆盖您的视图.

  • 更新:使用最新版本的 UIKit,您可以调用“loadViewIfNeeded”,它会调用“viewDidLoad” (2认同)

Di *_* Wu 3

这里必须有一个警告:

NSLog("VIEW DID LOAD!");
Run Code Online (Sandbox Code Playgroud)

相反,你应该这样写(@符号是必要的):

NSLog(@"VIEW DID LOAD!");
Run Code Online (Sandbox Code Playgroud)