gpt4 book ai didi

ios - 管理以编程方式实例化的 View Controller 的实例

转载 作者:行者123 更新时间:2023-11-28 10:24:11 28 4
gpt4 key购买 nike

如果我以编程方式从 Storyboard中实例化一个 ViewController,一旦它不再显示在应用程序中,它的内存是否会被释放?

我将其显示为模态。

最佳答案

扩展@Schemetrical 的回答,您需要确保至少有一个对您的 VC 的强引用,否则它将立即被释放。

这是一个正在发生的崩溃:

func viewDidLoad()
{
childVC = self.storyboard.instantiateViewControllerWithIdentifier("childVC")
self.view.addSubview(childVC.view)
}

在上面的例子中,当前 VC 的内容 View 保留了新创建的 View 的所有权,但没有人保留 View Controller 的所有权。一旦函数返回,它就会被释放,并且第一次尝试引用现在释放的 VC,你会崩溃(假设有一个按钮的 Action 指向 VC。)

如果将 VC 推送到导航堆栈,导航 Controller 就会取得所有权。一旦它从堆栈中弹出,它就会被释放。如果您以模态方式展示您的 VC,只要它在屏幕上,系统就会获得所有权。一旦它被解雇,它就会被释放。

如果您希望 VC 在弹出/关闭后仍然存在,则需要在某处保留对它的强引用。您可以在应用委托(delegate)、单例或应用的 Root View Controller 中保存对它的引用。

关于ios - 管理以编程方式实例化的 View Controller 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020002/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com