我正在使用ARC + Storyboard。
我没有使用segues或UINavigationController,而是使用以下内容呈现每个单独的视图:
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondVC"];
[self presentViewController:secondViewController animated:YES completion:nil];
因此,我的应用程序的典型流程是:
MainViewController
presentViewController:
SecondViewController
presentViewController:
ThirdViewController
...等
继续前进之后,我不希望我提出的上一个视图控制器不再在内存中徘徊。
现在,在我转到第二个视图控制器后,我可以在MainViewController中的计时器函数中设置一个断点,并验证一切是否仍在那里。
答案 0 :(得分:0)
注意:在automatically retained
时,viewcontroller为presentViewController:
,但在ARC中,它会处理保留的对象,并在适当的时候释放它。
稍后致电dismissModalViewController
release the retained controller automatically
。
答案 1 :(得分:0)
是不是我也许我读得不对?似乎对呈现和呈现视图控制器存在误解?
如果您的MainViewController位于顶部,然后您调用:
[mainViewController presentViewController:secondVC animated:YES completion:nil];
然后secondVC成为呈现的控制器,mainViewController成为其presentViewController。
那就是说,看起来你想让你的呈现视图控制器从内存中卸载?
“现在,在我转到第二个视图控制器之后,我可以在MainViewController中的计时器函数中设置一个断点,并验证一切是否仍在那里。”
如果是这样,这就不像视图控制器在这样呈现时的行为方式。 presentingViewController
将在内存中,直到收到内存警告通知,然后如果它不在顶部,它将仅卸载其视图。 (控制器对象本身仍然存在)。
简单地释放呈现控制器不是一个好主意,因为它会破坏控制器之间的父子关系。您可以手动修复此问题,但在某些情况下可能会有点麻烦。如果你知道自己在做什么,那就推荐。
如果你想真正杀死presentationViewController,你可能会更好create an extra custom container view controller,因此它会呈现视图控制器并释放前者。视图控制器并不昂贵,它的观点是:)
注意即使您使用导航控制器,加载/卸载其视图的行为也会类似。仅卸载视图,因为导航控制器会保留其所有视图控制器。
答案 2 :(得分:0)