在我的应用程序中,我有一个UIViewController子类(简称VC),我只在整个应用程序的一个地方使用。在那个地方,我一直在创造和推动它:
MyViewController* VC = [MyViewController new];
[self.navigationController pushViewController:VC animated:YES];
[VC release];
但我在想,因为这是我使用这种类型的视图控制器的唯一地方,所以我可以做这样的事情,这样每次将视图控制器推入堆栈时,所使用的设置都不会被重置:
static MapsToSendPicker* VC = nil;
if(!VC) {
VC = [MapsToSendPicker new];
}
[self.navigationController pushViewController:VC animated:YES];
[VC release];
该代码的问题在于VC的dealloc
方法,我释放所有实例变量并将它们设置为nil,最后我调用[super dealloc]
。这会取消分配静态视图控制器,但是测试if(!VC)
在之后不会被评估为真(如果它会破坏整个想法的目的;那么我每次都必须重新创建视图控制器)
我的解决方案是覆盖MyViewController中的dealloc
方法,而不最后调用[super dealloc]
。这有效,但编译器会发出警告。如何在保持我使用此设计获得的功能的同时摆脱警告?谢谢!
编辑:
快速搜索谷歌后,我找到了这个解决方案:
- (void)dealloc {
if(NO) {
[super dealloc];
}
}
但是我想要一些......更清洁。有什么想法吗?
答案 0 :(得分:3)
删除[VC release];
行并添加[super dealloc]。一切都会正常工作,dealloc永远不会被调用。通常,您应该考虑使用NSUserDefaults
来恢复VC属性,而不是始终将控制器保留在内存中。