【问题标题】:segues: what happens to the controller instance that calls the seque?segues:调用sequel的控制器实例会发生什么?
【发布时间】:2012-04-16 23:49:08
【问题描述】:

一开始我不太信任 segues(因为如果设置不正确会导致崩溃,而且我不清楚引擎盖下发生了什么),但我发现我更多地使用它们。不过,我仍然不完全“了解”正在发生的事情。

我在 ViewController A 和 ViewController B 之间有一个 segue,没有涉及 UINavigationController。它做了一个 FlipHorizo​​ntal 过渡,我喜欢。

当 A 启动 segue 时,A 实例会发生什么?我在 A 的 viewDidUnload 方法中放了一条日志语句,但它没有被调用。那么A还潜伏着吗?我希望能够继续回到 A 的同一个实例,并且它的所有 var 都完好无损,但我无法弄清楚如何做到这一点。

作为测试,我将 A 嵌入到导航控制器中,并尝试了对 B 的转场和推送——但无法返回到我的 A 实例。我在这里搞砸了什么?

【问题讨论】:

    标签: ios storyboard segue uistoryboard


    【解决方案1】:

    记住视图和控制器之间的区别。调用控制器仍然存在,它的视图也是如此。但是,任何不在屏幕上的 VIEW 都可以被系统卸载。届时将调用 viewDidUnload。

    基本上,控制器和其他所有对象一样,会一直存在,直到对它的所有引用都消失为止。此外,控制器拥有的任何东西也仍然存在。然而,当它还活着的时候,它会收到两条重要的信息,告诉它“摆脱任何你不需要或可以重建的东西。”

    其中之一是 viewDidUnload。另一个是 didReceiveMemoryWarning。

    所以,是的,如果您在 NavController 的深处有 100 个视图控制器的堆栈,那么所有 100 个视图控制器仍然存在……尽管它们的某些视图可能不在。

    【讨论】:

    • 感谢您的回复。是否有任何有效的设计模式可以将调用控制器 (A) 传递给目标控制器 (B),以便在从 B 发起的 segue 返回时可以将调用控制器 (A) 设置为目标控制器?可能不会,但我想我会问
    • 抱歉,我在某个问题上迷路了。我认为您所描述的内容是由委托或通知处理的。在 A 调用 B 之前,他会做一些类似 b.delegate = self 的事情,当 B 完成后,他会通知委托他已经完成。 A 的委托处理程序将解除控制器。如果您使用导航控制器,它会自动为您处理推送/弹出。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2023-03-15
    • 2012-09-18
    • 2015-02-04
    相关资源
    最近更新 更多