【问题标题】:Why isn't viewDidLoad executed when a UIViewController's view becomes visible?当 UIViewController 的视图变得可见时,为什么不执行 viewDidLoad?
【发布时间】:2013-09-21 03:07:30
【问题描述】:

我正在阅读一本关于 iOS 编程的书。假设我们有两个视图控制器(每个视图控制器都有自己的视图),在任何时候,我只能看到其中一个的视图。当APP运行时,我通过模拟器发送了“内存警告”。根据这本书,当我“强制”隐藏的视图控制器出现时,我应该观察到隐藏的视图控制器的 viewDidLoad 再次被触发。但我没有看到它发生。

换句话说,“内存警告”应该破坏不在屏幕上的视图。但我看不到它。

本书是为 iOS5 编写的。我想知道 iOS6+ 中是否有一些行为变化

谢谢

【问题讨论】:

    标签: ios uikit viewcontroller memory-warning


    【解决方案1】:

    是的,iOS 6 中的行为发生了变化。从 iOS 6 开始,UIViewController 在系统发送低内存警告时卸载其视图。

    viewDidUnload documentation 很清楚:

    在 iOS 6.0 中已弃用。在内存不足的情况下不再清除视图,因此永远不会调用此方法。

    【讨论】:

      【解决方案2】:

      它在第一次使用它的 VIEW 时被调用。第一次加载。

      所以当有人调用时:viewController.viewviewController.isViewLoadedNO 然后视图被加载并调用 viewDidLoad

      视图永远不会被卸载(从 iOS 6 开始)。

      【讨论】:

        【解决方案3】:

        viewDidLoad 只会在 viewController 初始化时被调用。

        您可能正在使用导航控制器或标签栏视图控制器来调出您的视图控制器 - 它们都不会释放您的视图控制器,因此不会调用 viewDidLoad。

        【讨论】:

        • 第一次使用 VIEW 时调用它=这不是它的初始化
        【解决方案4】:

        viewDidLoad 对应于 UIViewController 的视图创建时间。 viewWillAppear:viewDidAppear: 是 UIViewController 的视图变得可见时涉及的关键方法。

        【讨论】:

        • 谢谢。我只是编辑我的问题,以便更清楚。我只是想知道为什么“内存警告”没有导致视图被破坏
        • 内存警告不会破坏具有强引用的对象(也称为保留对象)。它执行您必须实现以释放内存的方法。如果您没有释放足够的内存,您的应用最终可能会被终止。
        • 第一次使用 VIEW 时调用它=这不是它的初始化
        猜你喜欢
        • 2021-04-02
        • 2012-07-31
        • 1970-01-01
        • 2019-03-26
        • 2015-06-14
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 2016-01-30
        相关资源
        最近更新 更多