2010-09-28 49 views
0

我觉得我不明白这里的一些基本内容。我一直在使用Instruments来检查现场分配,一直在我的应用程序中研究内存管理。我有一个模式视图控制器(settingsViewController),它有一个背景图像。我注意到的一件事是,即使调用了settingsViewController dealloc,仍然有一个活的Malloc 520 KB,ImageIO是负责任的库。我希望在解雇settingsViewController后,实时内存降低。 UIImageView仍然挂在某处?使用仪器来改善模态视图控制器的内存管理

下面是我如何在viewDidLoad,中加载图像,以及在完成时关闭视图控制器。

- (void)loadView { 
    [super loadView]; 

    ////// background //////// 
    UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"settings_background.png"]]; 
    [self.view addSubview:background]; 
    [background release]; 
    ////////////////////////// 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    ///////// done button ////////// 
    UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)]; 
    self.navigationItem.leftBarButtonItem = done; 
    [done release]; 
    //////////////////////////////// 
} 

- (void) doneButtonPressed { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

- (void)dealloc { 
    NSLog(@"settingsViewController dealloc"]; 
    [super dealloc]; 
} 

在这一点上,这是所有在settingsViewController,所以不需要做什么特别dealloc,对不对?以下是我如何在rootViewController中显示testViewController。

- (void) loadSettingsView { 
    SettingsViewController *settingsViewController = [[SettingsViewController alloc] init]; 
    UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController]; 
    [self presentModalViewController:settingsNavigationController animated:YES]; 
    [settingsViewController release]; 
    [settingsNavigationController release]; 
} 

我想确保自己明白发生了什么,然后再继续前进。我有几个不同的模式视图控制器,每个都有一个不同的图像作为背景。由于每一个都创建了一个Malloc 520 KB,所以我最终无缘无故地使用了2-3 MB的珍贵内存。什么是持续到520 KB?

回答

2

当您使用+[UIImage imageNamed:]方法时,框架为您缓存图像数据。这就是为什么即使在你的视图发布之后,你仍然会看到它保存在内存中如果您在模拟器中工作,并且想要看到它释放该内存,请在解除视图后向模拟器发送内存警告。图像框架应该释放缓存的图像数据。