Post

UIKit - UIViewController 생명주기(라이프사이클)

UIKit - UIViewController 생명주기(라이프사이클)

UIViewController 생명주기(라이프사이클)

Apple Develop Document

image

메서드명설명
loadView뷰가 메모리에 로드되기 전에 호출됨
(스토리보드로 구성했을 경우 loadView를 오버라이드하면 화면이 렌더링되지 않음)
viewDidLoad뷰가 메모리에 로드된 이후에 호출됨
viewWillAppear실제 화면에 뷰가 나타나기 전에 호출됨
viewIsAppearingviewWillAppearviewDidAppear 사이에서, 뷰가 이미 계층 구조에 추가되고 실제 화면에 렌더링되기 직전에 호출됨
viewDidAppear실제 화면에 뷰가 나타난 후에 호출됨
viewWillDisappear실제 화면에서 뷰가 사라지기 전에 호출됨
viewDidDisappear실제 화면에서 뷰가 사라진 후에 호출됨

사용 예시

BasicView.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import UIKit

class BasicView: UIView {
    
    let exBtn: UIButton = {
        let btn = UIButton()
        
        btn.setTitle("클릭", for: .normal)
        btn.setTitleColor(.white, for: .normal)
        btn.backgroundColor = .black
        btn.titleLabel?.font = .systemFont(ofSize: 20, weight: .bold)
        
        return btn
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        configureUI()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        configureUI()
        fatalError()
    }
    
    func configureUI(){
        addSubview(exBtn)
        
        backgroundColor = .white
        
        exBtn.translatesAutoresizingMaskIntoConstraints = false
        exBtn.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
        exBtn.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
        exBtn.widthAnchor.constraint(equalToConstant: 60).isActive = true
        exBtn.heightAnchor.constraint(equalToConstant: 50).isActive = true
    }
}

ViewController.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import UIKit

class ViewController: UIViewController {
    
    private let basicView = BasicView()
    
    // 뷰가 메모리에 로드되기 전에 호출
    override func loadView() {
        self.view = basicView
        print("ViewController - loadView 실행")
    }

    // 뷰가 메모리에 올라온 후에 호출
    override func viewDidLoad() {
        super.viewDidLoad()
        print("ViewController - viewDidLoad 실행")
    }
    
    // 실제 화면에 뷰가 나타나기 전에 호출됨
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("ViewController - viewWillAppear 실행")
    }
    
    // viewWillAppear과 viewDidAppear 사이에서, 뷰가 이미 계층 구조에 추가되고 실제 화면에 렌더링되기 직전에 호출됨
    override func viewIsAppearing(_ animated: Bool) {
        super.viewIsAppearing(animated)
        print("ViewController - viewIsAppearing 실행")
    }
    
    // 실제 화면에 뷰가 나타난 후에 호출됨
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("ViewController - viewDidAppear 실행")
    }
    
    // 실제 화면에서 뷰가 사라지기 전에 호출됨
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("ViewController - viewWillDisappear 실행")
    }
    
    // 실제 화면에서 뷰가 사라진 후에 호출됨
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("ViewController - viewDidDisappear 실행")
    }
}
This post is licensed under CC BY 4.0 by the author.