如果我有一个这样的导航堆栈:UINavigationController->ViewController1->ViewController2。当ViewController2被弹出时,系统是否保证以下方法的执行顺序?
- deallocof ViewController2
- ViewController1的viewWillAppear
我已经测试了一段时间,只看到dealloc首先被调用,但我不知道这是否可以保证,即,是否也有可能ViewController1的viewWillAppear在ViewController2的dealloc之前被调用?
没有这样的顺序保证,甚至可能在调用ViewController2.dealloc
之前调用ViewController1的viewWillAppear
。
原因是依赖于自动释放池和内部引用,很可能系统仍然有一个引用的视图控制器刚刚消失/刚刚消失,当它调用视图控制器的viewWillAppear
关于得到显示。
如果你需要清理时,ViewController2弹出运行,实现viewWillDisappear
/viewDidDisappear
。再一次,没有保证vc2.viewWillDisappear
必称为vc1.viewWillAppear
之前,但是你可以依靠vc2.viewWillDisappear
vc1.viewDidAppear
之前被调用(注意Did
,不是Will
最后一个)。