如果我以编程方式从 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/