0

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

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

但是如果这4个方法(viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear)没有被调用,程序就会崩溃或者发生retain cycle。

我找不到说明始终调用 viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear 的文档。

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

但是有没有不调用这4个方法的情况呢?
或者是否有可能通常调用 4 种方法,但有时不会无缘无故地随机调用?

4

6 回答 6

3

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

于 2012-11-12T12:54:17.583 回答
2

是的,它们总是被调用。如果您子类化您的视图控制器之一,请确保调用超类实现。

于 2012-11-12T12:57:53.817 回答
1

我认为您仍然可以相信这些方法,viewDidLoad而且dealloc对我来说从未失败过。

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

于 2012-11-12T12:51:54.187 回答
1

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

根据苹果文档 viewDidUnload 已被弃用。

查看此链接以获取 UIViewController 的官方苹果类参考

UIViewController 参考

它指出:

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

于 2012-11-12T12:56:50.293 回答
0

这是相同的线程,其中任何时候都问过我相同的问题,您可以在此处查看这些

这里是第一个链接

这里是第二个

于 2012-11-12T12:51:16.233 回答
0

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

于 2013-10-06T15:40:11.527 回答