dismissViewControllerAnimated不释放内存

时间:2013-12-09 02:23:08

标签: ios uiviewcontroller

我有一个UIViewController A,在这一点上我的记忆是104 Mb。在A中,我通常像这样打开UIVIewController B:

UIViewController *b = [[UIViewController alloc] initWithLevel:level actualUser:actualUser parentViewController:self];
[self presentViewController:b animated:NO completion:nil];

此时我的内存为132 Mb,然后当用户触摸一个按钮时我打开UIViewController C就像这样:

UIViewController *c = [[UIViewController alloc] initWithBlackboard:3];
[self dismissViewControllerAnimated:NO completion:^{
    [parentViewController(i get this property in the init method) presentViewController:c animated:NO completion:nil];
}];

在这里,我做的是关闭B然后打开C,所以当我关闭C时它会直接引导我到A.

此时我的记忆是一个153 Mb,这是错误的,因为B的记忆永远不会解除分配(释放)。在此之后,我不这样想回到A:

[self.presentingViewController dismissViewControllerAnimated:NO completion:^{}];

而不是拥有104 Mb我有132 Mb,所以B从未被释放过。窗户以正确的方式打开和关闭,但记忆是问题所在。

我已经分别测试了每个UIViewController,但我没有任何内存问题。问题来自于它们被捆绑在一起。有什么想法吗?

我也一直在寻找内存泄漏,我还没找到任何内容。

2 个答案:

答案 0 :(得分:4)

这是循环参考。

@interface A : UIViewController {

              UIViewController* B;

          }

@end 

@interface B : UIViewController {

               UIViewController* A;

         }

@end

如果您使用具有强引用或默认值的ARC,则会导致内存泄漏..

内存工具仪器并不总是正确的。在某些复杂程序中,要记录保留计数是一种检查发布是否正确的方法。如果使用ARC来管理内存,最好避免循环引用。

此链接是办公室ARC文件,非常详细。 enter link description here

只是一点建议。最好的祝福!

答案 1 :(得分:0)

问题是一个id变量,我永远不会“释放”设置为nil