在我的应用程序中,我有一个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)不会被评估为true(如果这样做会破坏整个想法的目的;那么无论如何我每次都必须重新创建视图控制器)。

我的解决方案是覆盖MyViewController中的dealloc方法,而不是最后不调用[super dealloc]。这可行,但是编译器会发出警告。在保持通过此设计获得的功能的同时,如何摆脱该警告?谢谢!

编辑:

经过快速的Google搜索,我找到了以下解决方案:

- (void)dealloc {
    if(NO) {
        [super dealloc];
    }
}


但我想要一点点...清洁工。有什么想法吗?

最佳答案

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

关于objective-c - 没有在静态UIViewController子类中调用[super dealloc],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10417956/

10-13 03:34