2012-10-26 161 views
3

我正在使用ARC + Storyboard。解散呈现的视图控制器

我不使用塞格斯,或一个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

注意:视图 - 控制是automatically retainedpresentViewController:,但在ARC它会处理保留的对象,并在适当的时候将其释放。

调用dismissModalViewController稍后将release the retained controller automatically

0

难道只是我,也许我的阅读不正确?看起来对于呈现和呈现的视图控制器存在误解?

如果你的MainViewController在最前面,然后你打电话: [mainViewController presentViewController:secondVC animated:YES completion:nil];那么secondVC就会成为呈现的控制器,并且mainViewController将成为它的presentsViewController。


这就是说,它看起来像你希望你的呈现视图控制器从内存中卸载?

“现在,在我进入我的第二个视图控制器之后,我可以在MainViewController中的一个定时器函数中放置一个断点,并确认一切仍然存在。

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

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

如果你想真的杀死presentsViewController可能是更好的create an extra custom container view controller所以它呈现视图控制器和释放前者。视图控制器并不昂贵,它的视图是它是什么:)

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

+0

是的,我认为你正确理解了我。我也完全理解呈现视图控制器和呈现视图控制器。我只是在寻找一种方法来实际销毁呈现视图控制器。我的应用程序基于计时器执行动画,并将多个大数据图像加载到内存中。一旦我改变了看法,我不希望这些操作在幕后被解雇。 –

+0

作为一种解决方法,我只是在我提出一个新的VC后阻止我的计时器功能被调用,但我仍对每个屏幕上加载的大图像感到紧张。我不希望对业绩产生负面影响。 –

+0

你可以做的是在将其他视图控制器放在顶部并手动重新加载后手动卸载所有大图像。 – nacho4d

0

可能会有所帮助。

[viewController.view removeFromSuperview];

我把它放在这里:How can I dismiss view?