我有UINavigationController
我推了几个UIViewControllers
。
我希望每次推送新的UIViewController
时,旧的UIViewController
都会从内存中释放出来。
为此,在每个-(void)viewDidAppear{
self.navigationController.viewControllers = @[self];
}
我都放了这段代码:
viewControllers
这样,UIViewController
数组只会减少到显示的数组。但由于我使用ARC,每个UIViewcontroller
都是强引用,并且它不会从内存中释放。
我尝试使用以下代码创建每个-(IBAction)goToSecond:(id)sender{
SecondViewController *secondVC = [[SecondViewController alloc]init];
__weak SecondViewController *weakSecondVC = secondVC;
[self.navigationController pushViewController:weakSecondVC animated:NO];
}
的弱实例:
FirstViewController.m
-(IBAction)goToSecond:(id)sender{
__weak SecondViewController *weakSecondVC;
[self.navigationController pushViewController:weakSecondVC animated:NO];
}
但是这样我就创建了两个实例:被推动的弱实例和留在内存中的强实实例。
我也试过创建弱引用并推送它:
FirstViewController.m
Application tried to push a nil view controller on target <UINavigationController: 0x127606210>.
但后来我得到以下内容:
-(void)goToSecond:(id)sender{
SecondViewController *pistasVC = [[EYSPistasViewController alloc] init];
[self.navigationController setViewControllers: @[secondVC]];
[self.navigationController popViewControllerAnimated:NO];
}
有没有办法实现这个目标?
编辑: 正如答案所示,我尝试过以下几点:
UINavigationController
UIViewController
的{{1}}堆栈已减少到我设置的堆栈,但内存仍然不断累加。
在这里您可以看到两种方法的比较:
答案 0 :(得分:0)
您可以尝试使用此代码使导航控制器只包含一个viewController。
-(IBAction)goToSecond:(id)sender
{
SecondViewController *secondVC = [[SecondViewController alloc]init];
[self.navigationController setViewControllers:@[secondVC] animated:NO];
}