详解看大神们的:
http://www.cnblogs.com/smileEvday/archive/2012/05/14/2495153.html
有一个需求就是从第4个viewController中向第3个viewController中传值(最初是有第3个viewController中进入第4个)改变第3个页面中的button的title;
若是直接pop回第3个页面的话很明显不能改变title,因为此时不会重绘页面,只是从 self.navigationController.viewControllers中调了出来;
若是直接push回第4个,使用这种方式可以达到需求,但是若是3,4页面不断切换的话则self.navigationController.viewControllers中会不断添加,内存也不短增加,很明显内存优化方面考虑这是不合理的;
最好的方法是3进入4的时候重新设置self.navigationController.viewControllers
setViewControllers:animated:通过该属性我们可以实现一次性替换整个navigationController的层次, 这个过程如果通过setViewControllers:animated:来设置,并指定动画为YES的画,动画将会从当前的navigationController所显示的vc跳转到所设置的目标viewController的最顶层的那个VC,而中间其他的VC将会被直接从VC层级中移除和添加进来(没有动画)。
即:
NSArray *arrNew=[[NSArray alloc]initWithObjects:[MainViewController new],[RecordViewController new],[TimeViewController new],nil];
[self.navigationController setViewControllers:arrNew animated:YES];
这样即使来回切换
self.navigationController.viewControllers.count也是不会增多的,一直是4