【问题标题】:iOS view controller memory not released after it's been dismissediOS视图控制器内存在被解除后未释放
【发布时间】:2013-06-12 00:34:40
【问题描述】:

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

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];

这很好用。我在ACLevelDownloadControllerACInstalledLevelsController 中都使用dismiss 方法关闭了该视图控制器。这也很好用。奇怪的是,当我展示视图控制器时,内存使用量上升了

但它永远不会退缩。如果我再次呈现它,它会上升更多 我正在使用ARC。为什么视图控制器关闭后使用的内存没有被释放?

编辑

他们被解除的方式是ACLevelDownloadControllerACInstalledLevelsController都连接了IBActions,当他们被点击时会调用这个方法

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

【问题讨论】:

  • 你能提供你用来解散的代码吗?
  • @GabrielePetronella 检查我的编辑
  • 您可以尝试在self.presentingViewController 上调用dismiss... 方法,而不是在self 上调用吗?
  • 您是否在ACLevelDownloadControllerACInstalledLevelsController 的某些部分使用了块?如果是这样,您能否向我们提供这些块的代码?
  • 两者都没有块

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


【解决方案1】:

我们可以从内存使用图中观察到 tabViewController 没有被正确地解除并且它在堆栈中建立。在关闭时,您必须允许呈现 tabViewController 的 viewController 关闭它。解雇是它的责任。还要为 Outlets 保留弱引用,并在 viewWillDisapper: 中为 nil** 分配任何强引用。您可以模态地呈现 viewController 作为临时中断,以从用户那里获取重要信息。如果这里不是这种情况,您可以删除模态呈现。检查此link。希望这会有所帮助:)

【讨论】:

  • 我无法手动从内存中释放它,因为我开启了 ARC。即使我在呈现的视图控制器中仍然有该方法,不应该 [self.presentingViewControllerdismiss... 与让视图控制器中的方法进行呈现具有相同的影响吗?因为即使我这样做了,它仍然不会从记忆中消失。
  • 另外,这些是完全不同的视图控制器,需要以模态方式呈现。
  • @ChrisLoonam 你不必释放它,只要确保你使用弱引用并将其设置为零。
猜你喜欢
  • 2014-05-14
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2018-04-27
相关资源
最近更新 更多