viewDidload方法再次调用导航控制器中的屏幕吗?

我正在使用导航控制器。 我已经推动两个viewcontroller导航堆栈。 当我从viewcontroller2使用导航栏的后退button回到viewcontroller1时viewcontroller1的 viewdidload方法再次被调用。但是我知道viewdidload在加载时只调用一次。 那为什么会这样呢? 请告诉我。

谢谢!!

关于viewDidLoad

viewDidLoad:每次你的视图控制器的视图被加载, 而不仅仅是第一次 。 控制器的视图可以在控制器的生命周期内被多次加载和卸载,并且每次都会调用viewDidLoad 。 只要不在屏幕上,它可能会被卸载,通常如果内存不足的话。

最佳做法

记住不要在viewDidLoad做view controller初始化。 这是一个常见的错误。 对于只在视图控制器加载时才会发生的事情,可以在控制器的一个init方法中执行。

当你推动视图控制器时,AFAIK会创build一个他们正在呈现的视图控制器的新实例。 当你回到viewController1它的viewDidLoad将不会被调用,但viewController2 viewDidLoad将被调用每次你从viewController1 viewController2。 当你从viewController2执行pop时,它自己被释放

-(void)viewDidLoad仅在加载视图控制器时调用

但如果你想调用任何方法,那么你可以编写代码

 -(void)viewWillAppear 

每当你的视图出现时调用这个方法。

如果你popup/解散它,一般不会调用viewDidLoad,但是viewDidAppear会。

这个例外是在6.0以前的iOS版本中,如果您收到内存警告,您的视图可能被卸载,并且当您popup时它将被重新加载。