iOS

[iOS] UIViewController์˜ Lifecycle(์ƒ๋ช…์ฃผ๊ธฐ)์— ๋Œ€ํ•ด์„œ

๊ฒฝํ‘ธ 2023. 3. 28. 18:30
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์˜ค๋Š˜์€ UIViewController์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

UIViewController์˜ ์ƒ๋ช…์ฃผ๊ธฐ

์• ํ”Œ ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ€์ ธ์™€๋ดค์Šต๋‹ˆ๋‹ค.

1. init

์œ„์˜ ์ด๋ฏธ์ง€์—์„œ๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ UIViewController๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ฒ˜์Œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. (์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์ด ์žˆ๋‹ค๋ฉด)

UIViewController๊ฐ€ ๊ฐ์ฒดํ™”๋  ๋•Œ init(coder:) ๋˜๋Š” Init(nibName:bundle:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ์ฝ”๋“œ

class MyViewController: UIViewController {

    init() {
        super.init(nibName: nil, bundle: nil)
        // ์ดˆ๊ธฐํ™” ์ฝ”๋“œ
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
        // ์ดˆ๊ธฐํ™” ์ฝ”๋“œ
    }
}

 

2. viewDidLoad

UIViewController์˜ View๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋กœ๋“œํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Modal ํ˜น์€ Navigation์˜ ํ˜•ํƒœ ๋“ฑ ๋˜ ๋‹ค๋ฅธ UIViewController๊ฐ€ ํ™”๋ฉด ์œ„์— ๋ณด์ด๊ฒŒ ๋œ ์ดํ›„

์‚ฌ๋ผ์กŒ์„ ๊ฒฝ์šฐ์— ๋‹ค์‹œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ(๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„) ์ดํ›„ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // ๋ทฐ์˜ ๊ณ„์ธต ๊ตฌ์กฐ ์„ค์ •
        setUI()
        // ๋ฐ์ดํ„ฐ ๋กœ๋“œ ๋“ฑ
        loadData()
    }
}

 

3. viewWillAppear

UIViewController๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Modal ํ˜น์€ Navigation์˜ ํ˜•ํƒœ ๋“ฑ ๋˜ ๋‹ค๋ฅธ UIViewController๊ฐ€ ํ™”๋ฉด ์œ„์— ๋ณด์ด๊ฒŒ ๋œ ์ดํ›„ ์‚ฌ๋ผ์งˆ ๊ฒฝ์šฐ, viewWillAppear๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

class MyViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉ
        updateUI()
        addAnimation()
    }
}

 

4. viewDidAppear

UIViewController๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ์งํ›„์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹œ์ž‘์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

viewWillAppear์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ™”๋ฉด ์ „ํ™˜ ์ดํ›„ ๋‹ค์‹œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

class MyViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์ž‘
        startAnimation()
    }
}

 

5. viewWillDisapear

UIViewController๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. 

์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

class MyViewController: UIViewController {

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅ
        saveUserData()
    }
}

 

6. viewDidDisappear

UIViewController๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง„ ํ›„์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. 

์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ด€๋ จ๋œ ์ž์›์„ ํ•ด์ œํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

class ViewController: UIViewController {

  override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    // ์ž์›ํ•ด์ œ
    releaseResources()
}

 

 


 

 

์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰ํ•  ๋•Œ viewWillAppear์—์„œ

์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ

์ •๋ฆฌํ•˜๋‹ค๋ณด๋‹ˆ

์‹คํ–‰ํ•  ๋•Œ๋Š” viewDidAppear์—์„œ ํ•ด์•ผ ๋˜๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋„ค์š”.

 

์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

๋ฐ˜์‘ํ˜•