在我的应用程序中,我有一个 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)
之后不会将测试评估为真(如果是的话,这将破坏整个想法的目的;那么无论如何我每次都必须重新创建视图控制器)。
我的解决方案是覆盖dealloc
MyViewController 中的方法而不是最后调用[super dealloc]
。这可行,但编译器会发出警告。如何在保持通过此设计获得的功能的同时摆脱该警告?谢谢!
编辑:
快速谷歌搜索后,我找到了这个解决方案:
- (void)dealloc {
if(NO) {
[super dealloc];
}
}
但我想要一些……更清洁的东西。有什么想法吗?