在iPhone中,是否可以保证始终调用viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear?

时间:2012-11-12 12:47:09

标签: iphone ios

我正在使用ViewWillAppear,viewDidAppear,viewWillDisappear,UIViewController的viewDidDisappear。
我使用UINavigationController来导航视图控制器。

例如,我在viewWillAppear或viewDidAppear中创建NSTimer或注册通知。我使计时器无效或删除viewWillDisappear或viewDidDisappear中的通知。

但是如果没有调用那4个方法(viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear),程序将崩溃或保留循环。

我找不到文档说保证始终调用viewWillAppear,viewDidAppear,viewWillDisappear,viewDidDisappear。

直到现在,它们似乎总是被调用,我的程序按预期工作。

但是有没有调用4种方法的情况? 或者有可能通常会调用4种方法,但有时候没有理由随机调用吗?

6 个答案:

答案 0 :(得分:3)

我可以说,viewWillAppear和viewDidAppear方法总是在视图中调用。 当您使用另一个视图更改视图或关闭视图时,将调用viewWillDisappear和viewDidDisappear方法。例如,如果您有一些滚动视图,则不会调用这些方法。

答案 1 :(得分:2)

是的,他们总是被召唤。如果你继承了一个视图控制器,请确保调用超类实现。

答案 2 :(得分:1)

我认为您可以相信这些方法,viewDidLoaddealloc对我来说永远不会失败。

您可以在那里注册和删除通知。 但是,我不知道您的所有应用规范以及我推荐的内容可能都不可行。

答案 3 :(得分:1)

是视频事件总是触发,但是要覆盖必须声明它们的行为。

根据apple文档,不推荐使用viewDidUnload。

请查看此链接以获取UIViewController的官方Apple类参考

UIViewController Reference

它声明:

UIViewController类提供在发生这些事件时调用的特定方法。子类可以覆盖这些方法来实现特定的行为。

答案 4 :(得分:0)

以下是同一个问题m同一个帖子 你可以在这里查看这些

here the first link

here the second one

答案 5 :(得分:0)

除了一些方法可能无法被调用和/或调用两次(例如,一次解除/弹出多个控制器)之外的错误,使用iOS 7,如果你启动向后滑动手势,部分揭示了之前的导航堆栈中的控制器,然后取消向后滑动,以便不会发生弹出,您将观察到并非所有控制器都调用所有方法。