iOS App Lifecycle

도윤·2021년 8월 8일
0

iOS

목록 보기
4/11

https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16813364#content

내용을 참고하여 작성했습니다.


인간이 태어나고 죽는 것 처럼 앱에게도 비슷한 lifecycle이 존재한다.

위와 같은 lifecycle을 가진다. 순서에 맞게 설명하겠습니다!

viewDidLoad()

프로젝트를 생성하게 되면 매일 보게되는 ViewContoller 클래스 내에 존재하는 오버라이드된 메서드이다.

override func viewDidLoad() {
        super.viewDidLoad()
}

공식 문서의 설명을 보게되면 View Controller가 메모리에 업로드된 후 메서드가 호출된다고 나와있다.

일반적으로 리소스를 초기화하거나, 초기화면을 구성하는 용도로 주로 쓰인다.
이 메소드는 View Controller 생에 딱 한번 호출이 된다.
따라서 한 번만 있을 행위에 대해서는 이 메소드 안에 정의 해주어야 한다.

viewWillAppear()

View가 실제 화면에 나타나기 전에 실행되는 메서드이다. 유저가 직접 볼 수 없지만 우리는 UI component를 숨기거나 보여주는 등을 할 수 있다.

viewDidLoad와 비슷해보이지만 viewDidLoad는 딱 한번만 호출되는
반면 만약 View가 A -> B -> A로 이동되는 과정이 있다면 viewDidLoad는 A,B가 가장 먼저 호출되는 때에 한번만 호출되지만 화면이 다시 A로 돌아오게 되면 viewWillAppear()이 호출된다.

viewDidAppear()

viewDidAppear()은 view가 화면에 나타난 후 바로 실행되는 메서드이다.

viewWillDisappear()

뷰가 사라지기 직전에 호출되는 메서드로, 뷰가 삭제 되려고하고있는 것을 뷰 콘트롤러에 통지합니다.

viewDidDisappear

뷰가 화면에서 없어지고 없어진 뷰에 대한 설정을 할 수 있는 마지막 기회이다.

위의 모든 메서드들은 오버라이드된 메서드이므로 super.method()를 해야함을 잊으면 안된다!


예시 코드를 보겠습니다!

viewController1.swift

import UIKit

class ViewController1: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print("VC1 viewDidLoad Called")
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("VC1 viewWillAppear Called")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("VC1 viewDidAppear Called")
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("VC1 viewWillDisappear Called")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("VC1 viewDidDisappear Called")
    }

}

viewController2.swift

import UIKit

class ViewController2: UIViewController {
    
    @IBOutlet weak var label: UILabel!
     
    @IBAction func goBack(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        label.text = "hello"
        
        print("VC2 viewDidLoad Called")
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("VC2 viewWillAppear Called")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("VC2 viewDidAppear Called")
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("VC2 viewWillDisappear Called")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("VC2 viewDidDisappear Called")
    }

}

위의 viewContoller파일을 실행하게 되면 VC1파일의 viewDidload,viewWillAppear,viewDidappear이 순서대로 실행된다.

Next를 눌러서 VC2로 이동하게 되면 VC2의 viewDidLoad가 호출되고 난 후 viewWillDisappear이 호출되고 나머지 VC2의 메서드가 호출되고 난 후 viewDidDisappear이 호출된다.

0개의 댓글