关闭视图控制器后iOS释放内存

时间:2014-04-02 20:29:18

标签: ios objective-c memory-management uiviewcontroller

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

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

有一个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当然)

1 个答案:

答案 0 :(得分:3)

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

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