Ios 管理以编程方式实例化的视图控制器的实例
如果我以编程的方式从我的故事板实例化ViewController,当它不再显示在应用程序中时,它的内存会被释放吗Ios 管理以编程方式实例化的视图控制器的实例,ios,objective-c,swift,memory-management,automatic-ref-counting,Ios,Objective C,Swift,Memory Management,Automatic Ref Counting,如果我以编程的方式从我的故事板实例化ViewController,当它不再显示在应用程序中时,它的内存会被释放吗 我把它作为一种模式来展示。只要没有什么东西对vc有强烈的影响,它就会解除锁定。一旦您解除该vc,视图将释放其对对象的引用,并且由于没有引用,它将解除锁定 只要没有什么东西对vc有强烈的影响,它就会解除锁定。一旦您解除该vc,视图将释放其对对象的引用,并且由于没有引用,它将解除锁定 继续@schemetral的回答,您需要确保至少有一个对您的VC的强烈引用,否则它将立即被释放 这是一个
我把它作为一种模式来展示。只要没有什么东西对vc有强烈的影响,它就会解除锁定。一旦您解除该vc,视图将释放其对对象的引用,并且由于没有引用,它将解除锁定 只要没有什么东西对vc有强烈的影响,它就会解除锁定。一旦您解除该vc,视图将释放其对对象的引用,并且由于没有引用,它将解除锁定 继续@schemetral的回答,您需要确保至少有一个对您的VC的强烈引用,否则它将立即被释放 这是一个正在形成的崩溃:
func viewDidLoad()
{
childVC = self.storyboard.instantiateViewControllerWithIdentifier("childVC")
self.view.addSubview(childVC.view)
}
在上面的示例中,当前VC的内容视图保留新创建视图的所有权,但没有人保留视图控制器的所有权。一旦函数返回,它就会被解除分配,当有东西第一次尝试引用现在解除分配的VC时,您就会崩溃(假设有一个按钮的操作指向VC)
如果将VC推到导航堆栈上,导航控制器将获得所有权。一旦从堆栈中弹出,它就会被释放。如果你以一种模式展示你的VC,只要它在屏幕上,系统就会拥有所有权。一旦它被解散,它就会被释放
如果你想让一个风投在它被爆出/解雇后留下来,你需要在某个地方保留一个强有力的参考。您可以将对它的引用保存在应用程序委托、单例或应用程序的根视图控制器中。扩展@Schemetral的答案,您需要确保至少有一个对VC的强引用,否则它将立即被释放 这是一个正在形成的崩溃:
func viewDidLoad()
{
childVC = self.storyboard.instantiateViewControllerWithIdentifier("childVC")
self.view.addSubview(childVC.view)
}
在上面的示例中,当前VC的内容视图保留新创建视图的所有权,但没有人保留视图控制器的所有权。一旦函数返回,它就会被解除分配,当有东西第一次尝试引用现在解除分配的VC时,您就会崩溃(假设有一个按钮的操作指向VC)
如果将VC推到导航堆栈上,导航控制器将获得所有权。一旦从堆栈中弹出,它就会被释放。如果你以一种模式展示你的VC,只要它在屏幕上,系统就会拥有所有权。一旦它被解散,它就会被释放
如果你想让一个风投在它被爆出/解雇后留下来,你需要在某个地方保留一个强有力的参考。您可以将对它的引用保存在应用程序委托、单例或应用程序的根视图控制器中。此外,由于您以模式显示它,
-presentViewController:animated:
将保留目标视图控制器,直到您调用-dismissViewController:animated:
@schemetral,我在回答中谈到了这种情况。此外,由于您是以模式演示它,-presentViewController:animated:
将保留目标视图控制器,直到您调用-dismissViewController:animated:
@schemetral为止,我在回答中谈到了这种情况。