如果我以编程方式从我的故事板中实例化ViewController,一旦它不再显示在应用程序中,它的内存是否会被释放?
我将它显示为模态。
答案 0 :(得分:3)
扩展@ Schemetrical的答案,您需要确保至少有一个强大的VC引用,或者它将立即解除分配。
这是一个崩溃:
func viewDidLoad()
{
childVC = self.storyboard.instantiateViewControllerWithIdentifier("childVC")
self.view.addSubview(childVC.view)
}
在上面的示例中,当前VC的内容视图保留了新创建的视图的所有权,但没有人保留视图控制器的所有权。一旦函数返回就会释放它,并且第一次尝试引用现在解除分配的VC时,你崩溃了(假设有一个按钮,它的动作指向VC。)
如果将VC推入导航堆栈,导航控制器将获得所有权。一旦它从堆栈中弹出,它就会被释放。如果您以模态方式呈现VC,系统将在屏幕上获得所有权。一旦被解雇,它就会被解除分配。
如果你希望VC在弹出/解散后继续存在,你需要在某处保留一个强有力的参考。您可以在应用委托,单身或应用程序的根视图控制器中保存对它的引用。
答案 1 :(得分:1)
只要vc上没有任何强力,它就会被释放。一旦你解除了那个vc,视图就会释放它对象的引用,因为没有引用,它就会释放。