【问题标题】:Always calling super after overriding?覆盖后总是调用超级?
【发布时间】:2017-06-11 08:43:12
【问题描述】:

我读到,如果您重写方法,最好调用super.method()

但是,覆盖UIStoryboardSegueperform() 方法并调用super.perform() 会引发异常。如果我没有打电话给super.perform(),它工作正常。

为什么?

【问题讨论】:

  • When should I call super? 的可能重复项。 – 如答案中所述,没有一般规则,您必须查阅相应方法的文档。
  • 用更简单的话来说:Apple 指定何时需要调用 super.method(),因为母类通过 Apple 隐藏的代码(触发调用等)做了一些“重要”的事情。比如UICollectionViewCellprepareForReuse()“这个方法的默认实现什么都不做。但是,当覆盖这个方法时,建议你还是调用super。”。将来他们可能会添加应该在内部调用的代码。在您自己的代码中,您有时可能会在子类化时避免这种情况。它适合每个案例/场景。

标签: ios swift overriding uistoryboardsegue


【解决方案1】:

有些方法不应该被直接调用。请参阅文档。例如,您不应该在子类的 loadView 中调用 [Super loadView],但可以在覆盖 viewDidLoad.Ref:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview?preferredLanguage=occ 时调用 [Super viewDidLoad]。

在这种情况下,子类需要有自己的实现,而不仅仅是扩展超级实现的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2011-12-13
    • 2016-10-23
    相关资源
    最近更新 更多