iOS视图控制器内存在被解除后未释放

时间:2013-06-12 00:34:41

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

当用户单击按钮时,它会显示一个带有两个视图控制器的新标签栏视图控制器。我就是这样做的

ACLevelDownloadController *dvc = [[ACLevelDownloadController alloc] initWithNibName:@"ACLevelDownloadController" bundle:[NSBundle mainBundle]];
ACInstalledLevelsController *ivc = [[ACInstalledLevelsController alloc] initWithNibName:@"ACInstalledLevelsController" bundle:[NSBundle mainBundle]];
UITabBarController *control = [[UITabBarController alloc] init];
control.viewControllers = @[dvc, ivc];
dvc.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:0];
ivc.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:1];
[self presentViewController:control animated:YES completion:nil];

这很好用。我在dismissACLevelDownloadController中使用ACInstalledLevelsController方法关闭了该视图控制器。这也很好。奇怪的是,当我呈现视图控制器时,内存使用率会上升 enter image description here

但它永远不会失败。如果我再次呈现它,它会更上升 enter image description here 我正在使用ARC。为什么视图控制器使用的内存在被解除后不被释放?

修改

他们被解雇的方式是ACLevelDownloadControllerACInstalledLevelsController连接了IBActions,点击它们时会调用此方法

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

1 个答案:

答案 0 :(得分:3)

我们可以从内存使用情况图中看到,tabViewController没有被正确解散并且在堆栈中构建。虽然解雇你必须允许提供tabViewController的viewController解雇它。解雇是他的责任。同时保留Outlets的弱引用,并在 viewWillDisapper:中为nil **指定任何强引用。您可以以模态方式呈现viewController作为临时中断,以从用户获取重要信息。如果不是这里的情况,您可以删除模态呈现。检查此link。希望这会有所帮助:)