티스토리 뷰

🍏/iOS

[iOS] viewDidLoad 실험

eungding 2021. 3. 17. 20:25
반응형

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가 불리는 것 같습니다! (추측)

반응형
댓글