viewDidLoad 在调用 popViewController Animated 之后每次都会被调用:

viewDidLoad getting called every time after calling popViewControllerAnimated:

我有一个名为 ViewControllerOne 的 vc,当用户点击 UITableViewCell 我调用 push segue 并导航到 ViewControllerTwo。在 ViewControllerTwo 中,我隐藏了导航栏,因此我创建了一个自定义后退按钮:

- (IBAction)backBttn:(id)sender {

    [self.navigationController popViewControllerAnimated:YES];

}

完美运行,但每次我导航回 ViewControllerOne 并再次打开 ViewControllerTwo 时都会调用 viewDidLoad(在 ViewControllerTwo 中)。 viewDidLoad 被调用是因为我正在使用 [self.navigationController popViewControllerAnimated:YES],我说得对吗?还是另有原因?

如果我对你的理解是正确的,你会看到在你推送到的视图控制器上调用了 viewDidLoad。 (ViewControllerTwo)。如果您从 ViewControllerOne 推送到 ViewControllerTwo,则会调用 ViewControllerTwo 的 viewDidLoad。

如果你然后点击后退按钮弹出 ViewControllerTwo,return 到 ViewControllerOne,然后再次推送到 ViewControllerTwo,你会看到 viewDidLoad第二次调用。

这是预期的行为。 Push segues(以及除 unwind segues 之外的所有其他 segues)创建它们所呈现的视图控制器的新实例。

同样,popping/dismissing 释放您要离开的视图控制器。

当您从导航堆栈中弹出视图控制器时,它管理的视图将被释放(或卸载)。因此,当您再次打开ViewControllerTwo时,必须重新加载该视图。这就是 viewDidLoad 在您的案例中被多次调用的原因。