【问题标题】:iOS release memory after dismiss view controlleriOS 在关闭视图控制器后释放内存
【发布时间】:2014-05-14 09:05:37
【问题描述】:

我搜索了很多,但不幸的是没有找到可以解决我问题的类似问题。

例如,我没有使用委托,所以强大的委托指针不是问题。

有一个 UItabbarcontroller 作为根视图控制器。加载该选项卡栏控制器后,它将在顶部显示一个视图控制器(模态)。一旦该视图控制器完成其工作,关闭视图控制器并返回到 TabBarController。原因是在那个视图控制器中,它有一个消耗大约 10mb 内存的背景图像。

我在 -viewDidAppear 中呈现视图控制器:

- (void)viewWillAppear:(BOOL)animated
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    if ([userDefaults valueForKey:@"token"]==NULL) {
        UIStoryboard *storyboard = [self storyboard];
        UINavigationController *navController = [storyboard instantiateViewControllerWithIdentifier:@"SignInNavigationController"];

        [self presentViewController:navController animated:NO completion:nil];
    }
}

该导航控制器是该视图控制器的根控制器。 (我希望这不是问题)

这就是我关闭视图控制器的方式:

[self.navigationController dismissViewControllerAnimated:YES completion:nil];

它们之间没有其他联系。

编辑: 有人问这个问题是什么,所以我的问题是,既然那个视图控制器被解除了,那它的内存应该被收集回来吧?或者如果没有,有什么办法可以收回吗?

(当然是 ARC)

【问题讨论】:

  • 还有什么问题? SignInNavigationController 永远不会被释放?或者也许只是图像从未被释放?您可以将 -(void)dealloc 方法添加到 SignInNavigationController 并在其中放置一个断点以找出这是否真的是您的问题!

标签: ios objective-c memory-management uiviewcontroller


【解决方案1】:

这取决于您加载图像的方式。如果您在UIImage 上使用imageNamed:,则您加载的图像实际上会被缓存。如果图像是通过 XIB 或故事板加载的,也是如此。假设没有其他保留周期问题,缓存将在内存不足通知发布时被清除。

如果您想更加主动,请不要通过 XIB、情节提要或UIImage 上的imageNamed: API 加载图像。相反,请使用 imageWithContentsOfFile: API。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2018-04-27
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多