UIViewController的弱实例

时间:2014-03-14 10:49:25

标签: ios objective-c uiviewcontroller automatic-ref-counting

我有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}}堆栈已减少到我设置的堆栈,但内存仍然不断累加。

在这里您可以看到两种方法的比较: enter image description here

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码使导航控制器只包含一个viewController。

-(IBAction)goToSecond:(id)sender
{
    SecondViewController *secondVC = [[SecondViewController alloc]init];
    [self.navigationController setViewControllers:@[secondVC] animated:NO];
}