Ответ
Самый ранний этап для настройки аналитики — это методы инициализации экземпляра класса, а не методы жизненного цикла вью.
Порядок и рекомендуемые методы:
init(nibName:bundle:)— для контроллеров, создаваемых программно.init?(coder:)— для контроллеров, загружаемых из Storyboard или XIB.awakeFromNib()— вызывается после загрузки всех объектов из архива (только для контроллеров из Storyboard/XIB).
Пример реализации:
class AnalyticsViewController: UIViewController {
// Для программной инициализации
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
trackEvent("ViewController initialized programmatically")
}
// Для инициализации из Storyboard/XIB
required init?(coder: NSCoder) {
super.init(coder: coder)
trackEvent("ViewController initialized from storyboard")
}
// Дополнительный ранний метод для Storyboard/XIB
override func awakeFromNib() {
super.awakeFromNib()
trackEvent("ViewController awoke from NIB")
}
private func trackEvent(_ message: String) {
Analytics.shared.log(event: message)
}
}
Почему не viewDidLoad()? viewDidLoad() вызывается позже, когда вью уже загружена. Для отслеживания самого факта создания контроллера методы инициализации подходят лучше.