3

我正在使用 ARC + 故事板。

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

4

3 回答 3

0

注意:viewcontroller 是automatically retainedwhen presentViewController:,但在 ARC 中它将处理保留的对象并在适当的时候释放它。

稍后打电话dismissModalViewControllerrelease the retained controller automatically

于 2012-10-26T04:41:10.627 回答
0

只有我,也许我没有正确阅读?似乎对呈现和呈现的视图控制器存在误解?

如果您的 MainViewController 在顶部,然后您调用: [mainViewController presentViewController:secondVC animated:YES completion:nil];然后 secondVC 成为呈现的控制器,而 mainViewController 成为它的presentingViewController。


也就是说,您似乎希望从内存中卸载呈现的视图控制器?

“现在,在我转到我的第二个视图控制器之后,我可以在 MainViewController 的计时器函数中设置一个断点,并验证一切是否仍然存在。”

如果是这样,这并不是视图控制器在这样呈现时的行为方式。它将一直在内存中,presentingViewController直到它收到内存警告通知,然后如果它不在顶部,它将只卸载它的视图。(控制器对象本身仍然存在)。

简单地释放呈现控制器并不是一个好主意,因为它会破坏控制器之间的父子关系。您可以手动修复此问题,但在某些情况下可能会有点麻烦。如果您知道自己在做什么,就推荐。

如果你想真正杀死 presentingViewController 可能更好,你创建一个额外的自定义容器视图控制器,以便它呈现视图控制器并释放前一个。视图控制器并不昂贵,它的视图就是这样:)

请注意,即使您使用导航控制器,有关加载/卸载其视图的行为也会相似。只有视图被卸载,因为导航控制器保留了它所有的视图控制器。

于 2012-10-26T04:53:53.997 回答
0

可能这会有所帮助。

[viewController.view removeFromSuperview];

我在这里找到了它:我怎样才能忽略视图?

于 2014-11-08T09:30:23.267 回答