当 UIViewController 弹出时,什么时候会在 UIViewController 上调用 dealloc?



如果我有一个这样的导航堆栈:UINavigationController->ViewController1->ViewController2。当ViewController2被弹出时,系统是否保证以下方法的执行顺序?

  1. deallocof ViewController2
  2. ViewController1的viewWillAppear

我已经测试了一段时间,只看到dealloc首先被调用,但我不知道这是否可以保证,即,是否也有可能ViewController1的viewWillAppear在ViewController2的dealloc之前被调用?

没有这样的顺序保证,甚至可能在调用ViewController2.dealloc之前调用ViewController1的viewWillAppear

原因是依赖于自动释放池和内部引用,很可能系统仍然有一个引用的视图控制器刚刚消失/刚刚消失,当它调用视图控制器的viewWillAppear关于得到显示。

如果你需要清理时,ViewController2弹出运行,实现viewWillDisappear/viewDidDisappear。再一次,没有保证vc2.viewWillDisappear必称为vc1.viewWillAppear之前,但是你可以依靠vc2.viewWillDisappearvc1.viewDidAppear之前被调用(注意Did,不是Will最后一个)。

最新更新