面试问题:例如,我有3个班级A,B& C.我从A - >导航B - > C,同时自动推送viewDidLoad
函数调用并在弹出viewWillAppear
期间调用。但是在弹出时可以调用我的viewDidLoad
函数吗?
答案 0 :(得分:3)
不,它不可能。只有viewDidAppear和viewWillAppear将被自己调用。你可以手动调用它。
一切顺利。
答案 1 :(得分:2)
刚刚加载视图时调用viewDidLoad
方法。然后导航控制器在显示视图时调用viewWillAppear
如果您希望在即将显示视图时执行某些代码,无论是在推送视图时还是在弹出顶部视图时,使用适当的方法viewWillAppear
更有意义,试图在不合适的时候调用viewDidLoad
方法
你能不能将viewDidLoad
中的任何代码移动到viewWillAppear
?
如果问题只是“如何在弹出时调用viewDidLoad?”,那么这很简单:
- (void) viewWillDisappear:(BOOL)animated
{
[self viewDidLoad];
}
正如旁注所示,如果你有一个像A-> B这样的视图控制器堆栈,那么弹出B时可能会自动调用viewDidLoad
,如果B在顶部,则导航控制器卸载A的视图(例如,如果应用程序收到内存警告)
答案 2 :(得分:0)
你应该不手动调用viewDidLoad
,它不是以这种方式处理的。像其他用户已经提到的那样使用viewWillAppear
。
关于是否可能发生viewDidLoad
从高级视图控制器弹出时调用的问题:我想当设备获得低内存警告并卸载时可能视图控制器在导航层次结构中向下。然后操作系统必须重新加载视图,但我没有对此进行测试,这可能永远不会发生。操作系统仅在没有超级视图时卸载视图,我没有检查是否在推送时,层次结构中的视图实际上已从层次结构中删除。
答案 3 :(得分:-1)
ViewDidLoad应该用于创建视图。 ViewWillAppear - 如果服务器请求是异步的,则用于数据交互。比如调用API或任何功能。或者当视图出现时我们想要调用的任何功能。
ViewDidAppear - 如果服务器请求是同步的,则用于数据交互。