我应该实现什么功能来清理UINavigationController的视图

时间:2011-03-08 13:29:26

标签: iphone cocoa memory-management uiviewcontroller uinavigationcontroller

我有一个带有表格视图的UINavigationController。因为当选择列表中的项目时它是标准行为,我将customViewController推送到UINavigationControllerCustomView出现,我在标题栏中看到了我的后退按钮。

我的问题是,当我点击标题栏中的后退按钮导航回我的列表时,我实现了哪些功能,以确保在customViewController中创建的所有内容都被完全销毁并从内存中删除?

我尝试将自己的清理代码放在自定义控制器的viewdidunload方法中,但是当我点击后退按钮时甚至没有输入。

(我也不确定如何用这句话来表达,欢迎提出建议)

4 个答案:

答案 0 :(得分:0)

viewDidUnload的{​​{1}}方法似乎是进行内存清理的好地方,即释放所有可以在UIViewController或更高版本中轻松重新创建的对象。

但是不能保证视图控制器本身会被解除分配。 viewDidLoad可以在内部缓存对象。

答案 1 :(得分:0)

UINAvigationController内分配的控制器将自动删除。如果您只需要一个实时,请在导航控制器中全局创建详细控制器,而不是每次需要转到详细视图时,因此您将始终使用相同的控制器。通过 viewDidDisappear 方法按下后退按钮时,您可以清除它。

答案 2 :(得分:0)

Apple在他们的documenation中非常清楚地解释了一切(有漂亮的图片和一切!)。基本上,当您显示视图时使用pushViewController:animated:,当您返回时使用popViewControllerAnimated:

使用类似的内容转到新屏幕:

- (IBAction)goSomewhereButtonPressed:(id)sender {
    SomewhereViewController *vc = [[SomewhereViewController alloc] initWithNibName:@"SomewhereView" bundle:nil];
    [self.navigationController pushViewController:vc animated:YES];
    [vc release];
}

按下BACK按钮时,它将清理屏幕。 Apple建议您使用UINavigationControllerDelegate进行其他设置&如果需要清理。

将屏幕清理放在其控制器中(SomewhereViewController)。

    - (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    NSLog(@"Somewhere's viewDidUnload called");
}

- (void)dealloc
{
    [super dealloc];
    NSLog(@"Somewhere's dealloc called");
}

答案 3 :(得分:0)

我总是把我的清理代码放在dealloc中:

-(void)dealloc {
   // cleanup code here
   [super dealloc];
}