0

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

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

编辑:

快速谷歌搜索后,我找到了这个解决方案:

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

但我想要一些……更清洁的东西。有什么想法吗?

4

1 回答 1

3

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

于 2012-05-02T16:39:55.020 回答