我的同事有时会在覆盖ios方法时调用super,有时候不会.这似乎主要基于他们的经验.在决定是否打电话给超级时,是否有经验法则?
例如:
// Has super
override func awakeFromNib() {
super.awakeFromNib()
}
// No super
override func drawRect(rect: CGRect) {
}
Run Code Online (Sandbox Code Playgroud)
对于是否应该调用给定方法的超级实现,实际上没有经验法则.这应该根据具体情况确定,具体取决于超类的实施方法文档中的建议以及您的要求.
只是为了解释为什么你所包含的两个例子可能就是它们的样子,我们可以查看- [UIView drawRect:]的文档,其中说明:
如果直接子类化UIView,则此方法的实现不需要调用super.但是,如果要子类化其他视图类,则应在实现中的某个时刻调用super.
以及- [NSObject awakeFromNib]的文档,其中说明:
您必须调用awakeFromNib的超级实现,以便为父类提供执行所需的任何其他初始化的机会.虽然此方法的默认实现不执行任何操作,但许多UIKit类提供非空实现.
大多数情况下,你可以安全地打电话给方法的超级实现(见下面的评论).但是,请注意,某些方法要求您调用其超级实现,有些则不需要,有些方法甚至要求您在覆盖中的特定点调用超级实现.所以请记住,如有疑问,请务必查阅文档.
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |