Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 管理以编程方式实例化的视图控制器的实例_Ios_Objective C_Swift_Memory Management_Automatic Ref Counting - Fatal编程技术网

Ios 管理以编程方式实例化的视图控制器的实例

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的强烈引用,否则它将立即被释放 这是一个

如果我以编程的方式从我的故事板实例化ViewController,当它不再显示在应用程序中时,它的内存会被释放吗


我把它作为一种模式来展示。

只要没有什么东西对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为止,我在回答中谈到了这种情况。