不在静态UIViewController子类中调用[super dealloc]

时间:2012-05-02 16:34:54

标签: objective-c ios static uiviewcontroller dealloc

在我的应用程序中,我有一个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];
    }
}

但是我想要一些......更清洁。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

删除[VC release];行并添加[super dealloc]。一切都会正常工作,dealloc永远不会被调用。通常,您应该考虑使用NSUserDefaults来恢复VC属性,而不是始终将控制器保留在内存中。