Overridden Super Call
ID |
swift.overridden_super_call |
Severity |
low |
Remediation Complexity |
trivial |
Remediation Risk |
low |
Remediation Effort |
low |
Resource |
Reliability |
Language |
Swift |
Tags |
ios, reliability, suspicious-code |
Description
Reports an override func of a UIKit / AppKit / XCTest lifecycle
method whose body never calls super.<method>(). The parent
class’s setup or teardown is silently skipped.
override func viewDidLoad() { // FLAW
print("subclass setup")
}
override func viewDidLoad() { // OK
super.viewDidLoad()
print("subclass setup")
}
Rationale
Lifecycle methods like viewDidLoad, viewWillAppear,
awakeFromNib, prepareForReuse, layoutSubviews, setUp, and
tearDown are required to call super — the parent class
relies on them to wire up subviews, push state, or clean up
resources. Skipping the super call usually causes "works in
isolation, breaks in the larger app" bugs that are easy to commit
and hard to diagnose.
Remediation
Call super.<method>() first (or last, depending on the framework
contract):
override func viewDidLoad() {
super.viewDidLoad()
setupSubviews()
}
The rule fires only for a fixed allow-list of well-known lifecycle methods. Custom overrides where you intentionally replace the parent’s behaviour are left alone.