解雇呈现的视图控制器

时间:2012-10-26 04:20:23

标签: objective-c ios ipad

我正在使用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中的计时器函数中设置一个断点,并验证一切是否仍在那里。

3 个答案:

答案 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)

可能会有所帮助。

[viewController.view removeFromSuperview];

我在这里说:How can I dismiss view?