我已經編寫了好幾年了,而且我非常習慣在重寫它時總是調用方法的超級構造函數。但最近我一直在想,是否總是有必要的......當你重寫一個初始化程序時,你應該調用super.init()
。但是在斯威夫特和iOS開發,如果你重寫UIViewController
生命週期方法像viewDidLoad()
,忘記打電話給super.viewDidLoad()
這麼想的產生任何警告或錯誤以及代碼編譯器似乎編譯罰款。所以我想知道這個調用是否以某種方式構建到SDK中,如果甚至有必要(考慮到我們想讓代碼儘可能高效和正確)?需要在Swift中爲生命週期方法調用超級構造函數
1
A
回答
2
我想你可以看here一個很好的答案。
蘋果不限制你打電話super.viewDidLoad()
,但它不會是安全的它的調用之前使用的一些觀點週期的方法和變量。如果你想首先創建你自己的變量或屬性 - 我想,這不會是一個問題。
0
是的,你應該總是叫超級。
這是我做的alwyas
// MARK: - Controller life cycle stack
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
setupNavigationBar()
}
override func viewDidAppear(animated: Bool)
{
super.viewDidAppear(animated)
}
+0
我也是(除了重寫方法沒有在其中做任何事情,但我想這只是舉一個例子)...但是我要找的是一些文檔,說明爲什麼你需要它(一般不是,但是對於iOS )。如果你編寫'override func viewDidLoad(){self.doSomething()}'它會編譯並工作得很好......那麼爲什麼要調用'super.viewDidLoad()'?它是多餘的嗎? – NikMos
0
所以,過了一段時間我有第一手的經驗,如果我不總是調用超可能會發生什麼:
比方說,你有兩個viewControllers
class ViewControllerA: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.doSomethingImportant()
}
}
class ViewControllerB: ViewControllerA {
override func viewDidLoad() {
self.doSomethingLessImportant()
}
}
現在你期望當你推到ViewControllerA
它會叫doSomethingImportant()
,但在大多數情況下不會發生,b因爲您忘記了在ViewControllerA
中撥打super.viewDidLoad()
。
相關問題
- 1. JavaScript - 屬性生命週期和構造函數方法觸發
- 2. Angular 2 - 構造函數調用後的生命週期事件
- 3. Ionic2 - 多次調用構造函數和頁面生命週期
- 4. 在C調用超級構造函數#
- 5. Android活動生命週期:爲什麼不調用超級方法先執行?
- 6. Python調用超級構造函數
- 7. 在Java構造函數中調用超級函數
- 8. 爲什麼從android活動生命週期方法調用超類方法?
- 9. 在Java中超級構造函數的調用方法,是不是?
- 10. 爲什麼Swift構造函數使用命名參數調用?
- 11. implict超級構造函數
- 12. 在構造函數中自動調用超類的方法
- 13. 在超類的構造函數中調用抽象方法
- 14. 問題在子類構造函數中調用超類方法
- 15. 爲什麼Activity API生命週期方法使用RuntimeException強制子類調用超級方法?
- 16. 爲什麼'self'需要從其構造函數中調用Ruby方法?
- 17. 傳遞函數爲超級構造
- 18. 調用重載在ScalaJS級的超級構造函數延伸的原生類
- 19. 在Java中調用默認和超級構造函數
- 20. 在非構造函數方法上強制執行超級調用
- 21. 回調方法 - 爲什麼稱爲回調方法的生命週期方法?
- 22. 要求在子類構造函數中調用方法
- 23. ponylang:在另一個構造函數中調用構造方法?
- 24. Android生命週期方法
- 25. 從子類構造函數調用超級構造函數是否在內存中創建超類的對象?
- 26. CustomArrayAdapter中的超級構造函數
- 27. 超級類中的java構造函數
- 28. 在父構造函數之前調用child方法在PHP中構造函數
- 29. 在Swift中需要UIViewController的構造函數
- 30. 使用構造函數調用方法
很好的答案 - 謝謝! – NikMos