【问题标题】:In iPhone, is it guaranteed that viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear are always called?在 iPhone 中,是否保证总是调用 viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear?
【发布时间】:2012-10-31 21:24:40
【问题描述】:

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

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

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

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

到目前为止,它们似乎总是被调用,并且我的程序按预期运行。

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

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我注意到 viewWillDisappear: 和 viewDidDisappear: 在接到电话时没有被调用。
        • 嗯,这很有趣@MurraySagal。我以前从未测试过这种情况。我不再做 iOS 开发,所以我没有设备来测试这个。
        • 正确,viewWillDisappear 如果您的应用程序是后台的,则不会调用。这是因为在这种情况下视图堆栈没有改变。
        【解决方案4】:

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

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

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

        UIViewController Reference

        它说:

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

        【讨论】:

        • 错误... [super dealloc] 不应该被调用,-(void)dealloc 可以被覆盖。
        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          这里是同一线程,其中同一件事在任何时候都问过 m 你可以在这里查看这些

          here the first link

          here the second one

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-04-12
            • 1970-01-01
            • 2014-03-21
            • 1970-01-01
            • 2010-12-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多