천천히 해도 괜찮아

Swift - UIViewController LifeCycle을 앱으로 테스트하기 본문

iOS/Swift

Swift - UIViewController LifeCycle을 앱으로 테스트하기

엘리아 2022. 3. 21. 23:16

안녕하십니까? 엘리아입니다! 

지난번에 UIViewController의 LifeCycle에 대한 글을 올렸습니다. 그런데 역시 글로 보는 것보다는 직접 App으로 실행해보고 눈으로 결과를 보면 이해가 더 잘될 수 있습니다. 그래서 오늘은 App으로 테스트를 해보겠습니다. 😆


혹시라도 UIViewController에 대한 글을 아직 보지 못하셨다면 먼저 글을 읽어보시길 추천합니다!

https://dpffldk.tistory.com/12 

 

iOS(Swift) - UIViewController LifeCycle

안녕하십니까? 엘리아입니다! 오늘은 UIViewController 생명주기에 대해 글을 써보려 합니다. iOS 프로그래밍에서 정말 중요한 부분이고 반드시 알고 있어야 합니다. 혹시라도 내용에 틀린 부분이 있

dpffldk.tistory.com

 

이제 Xcode를 실행하고 코드를 작성해보겠습니다. UIViewController LifeCycle을 두 개의 앱 화면을 왔다 갔다 하는 식으로 테스트해보겠습니다.

//ViewController.swift

import UIKit

class ViewController: UIViewController {
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        print("init 호출")
    }
    
    override func loadView() {
        super.loadView()
        print("loadView 호출")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad 호출")
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewWillAppear 호출")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear 호출")
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear 호출")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear 호출")
    }
    
    deinit {
        print("deinit 호출")
    }
    
}

앱이 실행되면 가장 먼저 보여줄 화면의 코드입니다. init부터 deinit까지호출되는 시점에서 print 합니다. 

 

//  SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        print("Second init 호출")
    }
    
    override func loadView() {
        super.loadView()
        print("Second loadView 호출")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("Second viewDidLoad 호출")
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("Second viewWillAppear 호출")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("Second viewDidAppear 호출")
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("Second viewWillDisappear 호출")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("Second viewDidDisappear 호출")
    }
    
    deinit {
        print("Second deinit 호출")
    }
    
    @IBAction func DismissButtonDidTapped(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }
    
}

첫 번째 화면에서 다음 화면으로 넘어갔을 때 보여줄 화면의 코드입니다. 그런데 마지막 줄에 self.dismiss(animated: true, completion: nil) 이라는 코드가 보입니다. 저 코드는 현재 보이는 두 번째 화면을 닫는다는 뜻입니다. 두 번째 화면에 있는 버튼을 눌렀을 때 실행됩니다. 설명이 길어질지도 모르니까 @IBAction에 대해서는 다음 글에서 설명해보겠습니다. ^^ 

아래 사진은 테스트할 앱 화면입니다. (디자인을 보면 정말 마음에 안 들지만... ) '다음으로' 버튼을 누르면 주황색 화면이 보이고 '이전으로' 버튼을 누르면 주황색 화면이 닫히고 빨간색 화면으로 돌아옵니다.

App 화면

앱을 실행하면 빨간색 화면이 먼저 보입니다. 빨간색 화면이 나왔을 때 init, loadView, viewDidLoad, viewWillAppear, viewDidAppear까지 호출되었다고 print 되는 것 보셨나요? 그리고 빨간색 화면이 종료되면 viewWillDisappear, viewDidDisappear, deinit까지 호출됩니다.

빨간색 화면에서 주황색 화면으로 넘어가서 주황색 화면이 떠있는 동안은 Second init ~ Second viewDidAppear가 호출되고 주황색 화면이 사라지자 Second viewWillDisappear ~ Second deinit까지 호출됩니다. 

Lifecycle Test

이 글을 보고 계신 분들도 UIViewController의 Lifecycle을 정확히 이해하고 싶다면 저처럼 직접 앱으로 테스트해보며 공부하시는 것을 추천드립니다..! 음.. 그런데 조금 아쉬운 부분이 있습니다...ㅠㅠ 원래 viewDidLoad와 viewWillAppear의 차이를 정확히 보여드리려고 했는데 이 프로젝트에서는 그 부분을 보여드리지 못했네요.. 다음 글에서 보여드릴 수 있도록 하겠습니다.

소스 코드가 필요하시다면 아래 링크에서 다운로드하실 수 있습니다..! ViewControllerLifecycleExample 폴더 안에 코드가 있습니다.

https://github.com/yuminc03/Tistory_Swift_SourceCode 

 

GitHub - yuminc03/Tistory_Swift_SourceCode: 티스토리 블로그에 올린 Swift글에 있던 코드를 올립니다.

티스토리 블로그에 올린 Swift글에 있던 코드를 올립니다. Contribute to yuminc03/Tistory_Swift_SourceCode development by creating an account on GitHub.

github.com


그럼 다음에는 또 다른 글로 다시 찾아오겠습니다. 긴 글 읽어주셔서 감사합니다!

Comments