【问题标题】:iPhone: [super viewDidUnload] calling orderiPhone:[super viewDidUnload] 调用顺序
【发布时间】:2011-01-22 20:29:12
【问题描述】:

我想知道在释放属性之前或之后调用[super viewDidUnload]是否有任何区别。

谢谢!

  self.webView = nil;
  self.fullText = nil;
  [super viewDidUnload];

  [super viewDidUnload];
  self.webView = nil;
  self.fullText = nil;

【问题讨论】:

标签: iphone objective-c


【解决方案1】:

这就像 dealloc 方法。

- (void)dealloc
{
    [array release];
    [super dealloc];
}

所以我认为我们应该最后打电话给[super viewDidUnload]

【讨论】:

    【解决方案2】:

    我从不认为这很重要,但我们只是发现了一个错误,即应用程序首先调用它时崩溃了。我办公室的趋势是最后调用它,但 Apple 模板将它放在首位。

    你可以做任何你想做的事,但从现在开始我会一直叫它。

    【讨论】:

    • 有趣的是,如果您将出口从 IB 拖到代码后面,它会在超级调用之前插入 nil 设置...考虑到模板和位置厘米。
    • 经历与@ZaBlanc 相同。崩溃!
    • 虽然模板把它放在第一位,但我总是把它放在最后,作为一项安全功能,以防万一超级卸载可能会破坏程序的东西。
    【解决方案3】:

    这个问题没有完全回答。 (当我在谷歌上搜索这个主题时,它是第一次被击中,所以一个完整的答案对我和其他人都会有用。)

    如果超类在 viewDidUnload 中做了什么,那么在你的类的 viewDidUnload 中调用它的正确顺序是什么:在释放属性之前还是之后?

    为了记录,似乎共识是调用超级方法LAST:

    -(void)viewDidUnload {
        self.some_property = nil;
        [super viewDidUnload];
    }

    【讨论】:

      【解决方案4】:

      这仅在您的视图的超类确实在viewDidLoad 中执行某些操作时才重要。默认的UIViewControllerviewDidLoad 中没有任何作用,因此如果您的视图是标准的UIViewController,那么您可以将[super viewDidLoad] 放在viewDidLoad 方法中的任何位置。但是,如果superviewDidLoad 中做了什么,那么将[super viewDidLoad] 放在哪里就很重要。

      【讨论】:

      • 他问的是 [super viewDidUnload] 而不是 viewDidLoad。
      【解决方案5】:

      这取决于超类在viewDidUnload 中的作用。如果它只是一个标准的UIViewController,那么两者都可以,因为-[UIViewController viewDidUnload] 什么都不做。

      【讨论】:

      • 另一种情况呢 - 即如果 [super viewDidUnload] 不是标准的 UIViewController 并且在 viewDidUnload 中做了一些事情?
      • @delirus:对于“清理”的方法,通常会在之后调用 super 的实现。同样,“初始化”的方法应该首先调用 super。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2012-09-12
      • 2011-04-10
      相关资源
      最近更新 更多