【问题标题】:Do I need to call [super viewDidUnload]?我需要调用 [super viewDidUnload] 吗?
【发布时间】:2011-10-11 17:57:48
【问题描述】:

我看到了一些调用[super viewDidUnload];Apple 示例和一些不调用的示例。我读过一篇文章(几个月前,所以我不记得网址了)说调用[super viewDidUnload]; 是不必要的,但除此之外没有解释。

是否有明确的理由为什么或为什么不告诉 super viewDidUnload
而且,(如果它应该完成)在将我的所有属性设置为nil 之前,我是否应该调用 super ,之后,还是这有关系?

- (void)viewDidUnload {
    // Is this necessary?
    // [super viewDidUnload];

    self.tableDataSource = nil;
    self.titleLabel = nil;

    // Is it better to call super before or after nil'ing properties?
    // [super viewDidUnload];
}

谢谢!

【问题讨论】:

标签: objective-c ios super viewdidunload


【解决方案1】:

1- 是否有明确的理由为什么或为什么不告诉 super viewDidUnload?

老实说,我不知道不打电话的后果。您可以尝试不调用它,一切顺利,但想象一下,Apple 添加了一些重要的代码,将在调用[super viewDidUnload] 时运行,现在会发生什么?坏事很可能会发生,你会花费宝贵的时间来解决你的问题。我的规则是:覆盖时,调用超级。

2 - 在将我的所有属性设置为 nil 之前,是否调用 super ,之后,还是重要?

这很重要,当我在释放我的对象之前调用 [super dealloc] 时,我已经看到了一些不好的事情发生。就像我看到我的 UI 很慢一样,因为我在 [super viewDidLoad] 之前进行了计算。它始终取决于您想要实现的目标。

归根结底,我在 viewDidUnload 的项目中所做的是:

//发表我的看法

[超级viewDidUnload];

至于 iOS6:

The method has been deprecated

【讨论】:

  • "[如果]Apple 添加了一些重要的代码,当调用[super viewDidUnload] 时会运行,现在会发生什么?" - 这是一个很好的观点直到现在我才真正想到。
  • 这是一个好主意,尽管Steven Fisher's point 可能准确地说苹果不太可能以这种方式从我们下面拉出地毯。 @chown
  • 乔希,我称之为投机。他可能是对的,但我不会为此付出代价......
  • 我也不会;包含[super viewDidUnload](以及Paul Tomblin makes an even better point,以防您出于某种原因更改超类)基本上没有任何成本,但我认为头脑清醒是件好事。
  • 不要认为该方法已被弃用。刚刚将一个项目转换为 iOS 8 / 64 位,Xcode 将缺少 [super viewDidUnload] 标记为“问题”。
【解决方案2】:

viewDidUnloaddealloc 类似,因为您正在“关闭”您的对象——您正在释放内存并将其置于(半)非活动状态。

Cocoa 中推荐的模式是在子类的 dealloc 末尾添加 [super dealloc],因为您需要确保在您的实例被解放了自己。 viewDidUnload 也有同样的想法,尽管它可能不是什么大问题。

一般来说,在创建的时候,先让超类工作。破坏时,让它持续工作。

你不需要发送[super deconstructionMethod] iff超类的实现什么都不做。我认为viewDidUnload 就是这种情况,但我不确定,这表明了正确的方向:超类对您来说是不透明的,所以除非它的实现记录没什么,你应该经常打电话。

【讨论】:

  • 这对乔希很有帮助,谢谢。希望我能“接受”这两个答案。
猜你喜欢
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2010-12-07
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多