【问题标题】:When do you call the super method in viewWillAppear, viewDidDisappear, etc...?什么时候调用viewWillAppear、viewDidDisappear等中的super方法...?
【发布时间】:2011-11-28 17:08:17
【问题描述】:

UIViewController's documentation中,苹果建议在viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear等实现中的某个时刻调用super……例如关于viewDidDisappear的讨论是:

您可以重写此方法以执行相关的其他任务 关闭或隐藏视图。如果你重写这个方法,你 必须在您的实施中的某个时刻调用 super

我的问题是何时调用超级方法是否重要,如果是,那么调用它的正确时间是什么时候? super 应该被称为方法的第一行、最后一行还是在中间的某个位置,具体取决于您的特定需求?

【问题讨论】:

    标签: iphone ios cocoa-touch ipad


    【解决方案1】:

    viewDidAppear 中首先调用super,以便您的调用将被覆盖。

    viewWillDisappear 中,这似乎是一个折腾,我已经对此进行了广泛的研究,但找不到确凿的答案,它似乎是 50/50。我决定在我的代码中最后调用super,就像在dealloc 中调用super 最后一样。

    【讨论】:

    • 你是怎么想出这些规则的?
    • 在 viewDidAppear 中似乎很明显,子类黎明应该在超类之上,所以首先调用 super。至于 viewWillDisappear 我没有看到任何好的理由,所以我顺其自然 - 直到被证明是错误的。 :-) 如果您有观点或看到了很好的理由,请发表!
    【解决方案2】:

    我通常会在我的实现中首先调用它们。但在大多数情况下,这应该无关紧要。

    【讨论】:

      【解决方案3】:

      对于UIViewController 的视图生命周期方法,我想说的是没有确定何时调用super 的灵丹妙药,您应该注意的是,有时您必须 em> 调用它,不管它应该在请求中还是在方法结束时。比如引用viewDidDisappear(_:)

      您可以重写此方法以执行相关的其他任务 关闭或隐藏视图。如果你重写这个方法,你 必须在您的实施中的某个时刻调用 super。

      但是,作为一般的做法,我们通常在与初始化、设置或配置相关的方法的开头调用super方法;另一方面,我们通常在与去初始化相关的方法或类似方法中,在末尾调用super方法。

      下面是XCTestCase类的调用方法示例:

      override func setUp() {
          super.setUp()
          // do the setups, such as creating the mock objects...
      }
      
      override func tearDown() {
          // make your objects no be nil for the next test...
          super.tearDown()
      }
      

      所以(作为另一个例子),当涉及到 viewWillAppearviewDidDisappear 方法时:

      override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(animated)
          // my code...
      }
      
      override func viewDidDisappear(_ animated: Bool) {
          // my code
          super.viewDidDisappear(animated)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        相关资源
        最近更新 更多