是否UIViewController调用方法presentViewController从内存中删除?

时间:2014-02-24 08:04:55

标签: ios memory-management uiviewcontroller uistoryboard

据说我有一个 UIViewController A 和一个 UIViewController B 。从A,我调用方法presentViewController:B。当B出现时,A会发生什么?它是从内存中删除的吗?如果没有,我应该用什么方法来删除它?

如果我的UI流程是这样的, A-> B-> A-> B-> A-> B-> ......依此类推为了防止内存相应增加?

5 个答案:

答案 0 :(得分:5)

当您使用控制器presentViewController:animated:completion:中的A方法以模态方式呈现控制器B时,会发生presentedViewController A属性设置为控制器BpresentingViewController的{​​{1}}属性设置为B。因此,在进行演示时,两个控制器都保存在内存中。

当您从A转到B时,请通过A的{​​{1}}属性dismissViewControllerAnimated:completion:致电{1}},如下所示:

A

(您也可以拨打presentingViewController,系统会自动将请求转发给展示视图控制器。)

之后,B的{​​{1}}属性将设置为[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; ,因此,如果没有任何内容,系统将对其进行内存释放指向它的其他强指针。

答案 1 :(得分:1)

不,A不会从内存中删除。 如果你想在A和B之间交替,你可以:

  • 使用UINavigationController然后按B,然后再将其弹出,然后又回到A
  • 或使B成为窗口的新根控制器,然后再次为A并添加适当的过渡
  • 或使用a作为根并呈现B.然后解雇B并且你回到A。

答案 2 :(得分:0)

UIViewController将保留在内存中,除非您弹出它。

使用push& 弹出,而不是仅仅推送新的UIViewControllers

而不是A->B->A->B->A->B->

你会得到这个A<->B

答案 3 :(得分:0)

拥有根视图控制器 A 完成任务时,让您的根视图负责删除 A 并显示 B 。同样,当 B 完成其任务提醒您的根视图删除 B 并再次显示 A 时。

答案 4 :(得分:0)

它不会自动释放。您可以使用dismissModalViewControllerAnimated手动释放它。

以下是一个非常好的教程:Link