🍏/iOS
[iOS] viewDidLoad 실험
eungding
2021. 3. 17. 20:25
728x90
반응형
viewDidLoad 에 관한 실험
(⚠️ 실험만 있고 분석은 없습니다 ⚠️)
XIB로 만든 뷰컨이랑
스토리보드에서 만든 뷰컨이랑 실험해봅니다.
참고로 저렇게 viewDidLoad 안에서 프린트안하고
isViewDidLoaded 를 찍어보면서 테스트해도 됩니다!
Case 1.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vc = XIBViewController()
let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "StoryboardViewController") as! StoryboardViewController
}
}
둘다 viewDidLoad 안불림
Case 2.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vc = XIBViewController()
vc.view.removeFromSuperview()
let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "StoryboardViewController") as! StoryboardViewController
vc2.view.removeFromSuperview()
}
}
둘다 viewDidLoad 불림
=> 사실 이 케이스 때문에 실험해봤다.
Case 3.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vc = XIBViewController()
vc.view.addSubview(UIView())
let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "StoryboardViewController") as! StoryboardViewController
vc2.view.addSubview(UIView())
}
}
둘다 viewDidLoad 불림
Case 4.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vc = XIBViewController()
vc.loadViewIfNeeded()
let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "StoryboardViewController") as! StoryboardViewController
vc2.loadViewIfNeeded()
}
}
둘다 viewDidLoad 불림
Case 5.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vc = XIBViewController()
print(vc.view.superview) // nil
let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "StoryboardViewController") as! StoryboardViewController
print(vc2.view.superview) // nil
}
}
둘다 viewDidLoad 불림
Case 6.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vc = XIBViewController()
self.addChild(vc)
let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "StoryboardViewController") as! StoryboardViewController
self.addChild(vc2)
}
}
둘다 viewDidLoad 안불림
[ 추가 ]
똑똑한 동료분이 알려주셨는데,
UIViewController의 view는 UIView! 타입이니까 호출하려면 메모리에 반드시 올라가있어야하는 것 같다고 하셨어요~
그래서 .view를 하면 메모리에 올라가서 viewDidLoad가 불리는 것 같습니다! (추측)
반응형