据说我有一个 UIViewController A 和一个 UIViewController B 。从A,我调用方法presentViewController:B。当B出现时,A会发生什么?它是从内存中删除的吗?如果没有,我应该用什么方法来删除它?
如果我的UI流程是这样的, A-> B-> A-> B-> A-> B-> ......依此类推为了防止内存相应增加?
答案 0 :(得分:5)
当您使用控制器presentViewController:animated:completion:
中的A
方法以模态方式呈现控制器B
时,会发生presentedViewController
A
属性设置为控制器B
,presentingViewController
的{{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 答案 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