我有一个带有表格视图的UINavigationController
。因为当选择列表中的项目时它是标准行为,我将customViewController推送到UINavigationController
。 CustomView
出现,我在标题栏中看到了我的后退按钮。
我的问题是,当我点击标题栏中的后退按钮导航回我的列表时,我实现了哪些功能,以确保在customViewController
中创建的所有内容都被完全销毁并从内存中删除?
我尝试将自己的清理代码放在自定义控制器的viewdidunload方法中,但是当我点击后退按钮时甚至没有输入。
(我也不确定如何用这句话来表达,欢迎提出建议)
答案 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];
}