gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:36:11 30 4
gpt4 key购买 nike

在我的应用程序中,我有一个 UIViewController 子类(简称 VC),我只在整个应用程序的一个地方使用它。在那个地方,我一直在这样创建和插入它:

MyViewController* VC = [MyViewController new];
[self.navigationController pushViewController:VC animated:YES];
[VC release];

但我在想,因为这是我唯一使用这种类型的 View Controller 的地方,所以我可以做这样的事情,这样每次将 View Controller 插入堆栈时,所使用的设置都不会被重置:

static MapsToSendPicker* VC = nil; 
if(!VC) {
VC = [MapsToSendPicker new];
}

[self.navigationController pushViewController:VC animated:YES];
[VC release];

该代码的问题在于,在 VC 的 dealloc 方法中,我释放了所有实例变量并将它们设置为 nil,最后我调用了 [super dealloc] .这解除了静态 View Controller 的分配,但测试 if(!VC) 之后未评估为真(如果是的话,这将破坏整个想法的目的;然后我必须重新创建无论如何每次都是 View Controller )。

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

编辑:

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

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

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

最佳答案

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

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com