Swift-执行SEGUE时,ViewControllers不会降低



我是内存管理和弧的整个概念的新事物。

我最近调查了它并发现了混乱的成功。

首先,应该注意的是,某些 ViewController do Deinitialize,但我仍在学习和清理我的应用程序。

但是,我注意到的一个常见模式是,当我使用该行navigationController?.popViewController(animated: true)时,如果没有强引用,则会在deinit A View Controller中进行Infact Infact a View Controller。

但是,我的问题是,当我使用segue并使用performSegue(withIdentifier: "showDetail_Segue", sender: nil)时,deinit方法从未使用/调用。(我只有一个打印声明来指示是否已降低了视图(。在大多数情况下,当我执行segue时,我将数据传递到另一个视图控制器,因此,我使用以下功能override func prepare(for segue: UIStoryboardSegue, sender: Any?) {}

我试图将我的segue更改为 navigationController?.pushViewController(VC, animated: true),但我的应用程序崩溃了。

我在这里错过了什么吗?

navigationControllerpopped时,Deinitliaze的ViewControllers在以编程性执行segue时也不会脱氧。

有人可以告诉我我做错了什么吗?

谢谢。

好吧,如果我正确理解您,您可能会误会对赛格的工作方式

segues不能用于返回到堆栈中的以前的ViewController

这很重要。如果您使用segues作为返回的方式而不是使用 popViewController,则创建了一个新实例,您可以返回到返回到deinit,因为ViewController仍在存储器中。

本质上,类似此列表的内容 ->详细信息 ->列表,您刚刚与SEGUE创建了列表的另一个实例。

呼叫performSegue时,此segue是推送到另一个VC的推动,您正在创建VC的新实例,但是导航堆栈仍然是相同的,您只会将VC添加到堆栈中。

记住:

堆栈:[root,vc1,vc2]

vc2.performsegue(push(

堆栈:[root,vc1,vc2,vc3]

当您解散VC时,该类仅致电denit

我希望这对您有帮助。

相关内容

  • 没有找到相关文章

最新更新