模态呈现的UIViewController在关闭时不会清空内存

时间:2014-06-10 08:28:19

标签: ios objective-c uiviewcontroller modalviewcontroller

我有一个问题,到目前为止,这让我花费了几个小时/天的调试时间。

我的情况是:

  • 我有一个显示一些数据的viewcontroller
  • 当用户点击按钮时,另一个视图控制器以模态方式显示
  • 用户关闭模态控制器后,内存使用量不会减少

我没有任何地方的模态视图的引用(弱或强)。

这就是segue的执行方式:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   UINavigationController *nav = [segue destinationViewController];
   SomeViewController *vc = (SomeViewController *)[nav topViewController];
   vc.dataArray = self.dataArray; // dataArray is a weak reference
}

这就是我关闭它的方式:

-(void)closeButtonClickHandler:(id)sender
{
   [self dismissViewControllerAnimated:YES completion:nil];
}

在我的viewDidDisapear方法中,我将所有内容设置为nil

- (void)viewDidDisappear:(BOOL)animated
{
    [self.map removeAnnotations:self.myMap.annotations];
    self.map.delegate = nil;
    self.map = nil;

    self.view = nil;

    [super viewDidDisappear:animated];
}

但是控制器仍然留在内存中。更糟糕的是,如果我多次打开它,它会不断增加消耗的内存,直到最终操作系统被迫关闭应用程序。

感谢任何/所有帮助:)

1 个答案:

答案 0 :(得分:0)

我发现一个小的侧视图有一个错误的参考集。它本来就很强大,本来应该是“弱”的。

@property (nonatomic, weak) UISomeView * someView;

之后,内存正常释放,不再叠加

tnx @JonathanCicohons提示:)