A UIViewController manages one screen. Like Android Activities, it has lifecycle methods you hook into.
Lifecycle methods
viewDidLoad()— view loaded once; set up UI here.viewWillAppear(_:)— about to become visible; refresh data.viewDidAppear(_:)— fully on screen.viewWillDisappear(_:)— leaving; save/pause.
class ProfileVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reloadData()
}
}
Common mistake: Don't access subviews before viewDidLoad — they don't exist yet.
Summary
View controllers manage screens with a clear lifecycle. Set up UI in viewDidLoad and refresh in viewWillAppear.