์๋ช ์ฃผ๊ธฐ ( LifeCycle )
์๋ช ์ฃผ๊ธฐ๋ผ๋ ๊ฒ์ ์ฑ์ ์ต์ด ์คํ๋ถํฐ ์ฑ์ด ์์ ํ ์ข ๋ฃ๋๊ธฐ๊น์ง ์ฑ์ด ๊ฐ์ง๋ ์ํ์ ๊ทธ ์ํ๋ค ์ฌ์ด์ ์ ์ด๋ฅผ ๋งํ๋ค.
์ฑ์ ์ํ๋ ์ฑ์ด ํ์ฌ ์ด๋ ํ ๊ฒ์ ํ ์ ์๋๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ค.
์ฑ์ ์๋ช ์ฃผ๊ธฐ ( App's Life Cycle )
App์ ์๋ช ์ฃผ๊ธฐ๋ APP์ ์คํ/์ข ๋ฃ ๋ฐ App์ด Foreground/Background ์ํ์ ์์ ๋, ์์คํ ์ด ๋ฐ์์ํค๋ event์ ์ํด App์ ์ํ๊ฐ ์ ํ๋๋ ๊ณผ์ ์ ๋งํ๋ค.
์นด์นด์คํก ์ฑ์ผ๋ก ์นดํก์ ํ๊ณ ์๋ ๋์ค์ ์ ํ๊ฐ ์์ ๋ ์ฑ์ด ํ๋ฉด์์์ ๋ณด์ฌ์ง์ง ์๋ ์ํ์ธ Background ์ํ์
์ฑ์ด ํ๋ฉด์ ์ฌ๋ผ์์๋ ์ํ์ธ Foreground ๋ฑ๊ณผ ๊ฐ์ ์ํ๋ค์ ์ ์ํ ๊ฒ์ด๋ค.
iOS์์ ์ฑ์ ์คํํ๋ฉด ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๊น ?
iOS์ฑ์ Objective - C ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ์ฑ์ main ํจ์์์ ์์ํ๋ค. ๋ค๋ง, iOS์ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ UIKit Framework๊ฐ main ํจ์๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฑ ๊ฐ๋ฐ์๋ค์ด ์ง์ main ํจ์์ ์ฝ๋๋ฅผ ์์ฑํ์ง๋ ์๋๋ค.
UIKit์ main ํจ์๋ฅผ ๋ค๋ฃจ๋ ๊ณผ์ ์์ UIApplicationMain ํจ์๋ฅผ ์คํํ๋ค. ์ด ํจ์๋ฅผ ํตํด UIApplication ๊ฐ์ฒด๊ฐ ์์ฑ๋๋๋ฐ, ์ด ๊ฐ์ฒด๋ฅผ ํตํด ์ฑ ๊ฐ๋ฐ์๋ ์ฑ์ ์คํ์ ๋ถ๋ถ์ ์ผ๋ก ๊ด์ฌํ ์ ์๋ค.
์ฑ์ด ์คํ๋๋ฉด ๋ฐ์๋๋ ์ด๋ฒคํธ ์ ๋ฆฌ
1. UIApplication ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
2. @UIApplicationMain ๋๋ @Main ์ด๋ ธํ ์ด์ ์ด ์๋ ํด๋์ค๋ฅผ ์ฐพ์ AppDelegate ๊ฐ์ฒด ์์ฑ
3. Main Event Loop๋ฅผ ์คํ ( touch, text input ๋ฑ ์ฌ์ฉ์์ ์ก์ ์ ๋ฐ๋ ๋ฃจํ )
Main Run Loop
๊ทธ๋ฆผ์ผ๋ก ํ์ธํด๋ณด์
Main Run Loop๋ผ๋ ๊ฒ์ ์ ์ ๊ฐ ์ผ์ผํค๋ ์ด๋ฒคํธ๋ค์ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค์ด๋ค. UIApplication๊ฐ์ฒด๋ ์ฑ์ด ์คํ๋ ๋, Main Run Loop๋ฅผ ์คํํ๊ณ ์ด Main Run Loop๋ฅผ View์ ๊ด๋ จ๋ ์ด๋ฒคํธ๋ View์ ์ ๋ฐ์ดํธ์ ํ์ฉํ๋ค. ๋ํ, Main Run Loop๋ View์ ๊ด๋ จ๋์ด ์๊ธฐ ๋๋ฌธ์ Main ์ฐ๋ ๋์์ ์คํ๋๋ค.
์ ์ ๊ฐ ์ผ์ผํค๋ ์ด๋ฒคํธ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์์๋ก ์ ๋ฆฌํ์๋ฉด,
1. ์ ์ ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค. ( ๋ฒํผ ํฐ์น, ํ๋ฉด ์ค์์ดํ ๋ฑ )
2. ์์คํ ์ ํตํด ์ด๋ฒคํธ๊ฐ ์์ฑ๋๋ค.
3. UIKit ํ๋ ์์ํฌ๋ฅผ ํตํด ์์ฑ๋ port๋ก ํด๋น ์ด๋ฒคํธ๊ฐ ์ฑ์ผ๋ก ์ ๋ฌ๋๋ค.
4. ์ด๋ฒคํธ๋ ์ฑ ๋ด๋ถ์ ์ผ๋ก Queue์ ํํ๋ก ์ ๋ฆฌ๋๊ณ Event Queue์ ์์ธ๋ค.
5. Event Queue์ ์๋ ์ด๋ฒคํธ๋ค์ด Main Run Loop์ ํ๋์ฉ ๋งคํ๋๋ค.
6. UIApplication ๊ฐ์ฒด๋ ์ด ๋ ๊ฐ์ฅ ๋จผ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ฒด๋ก ์ด๋ค ๊ฒ์ด ์คํ๋์ด์ผ ํ๋์ง ๊ฒฐ์ ํ๋ค.
์์ ๋ด์ฉ๊น์ง ์ฌ์ฉ์๊ฐ ์ฑ์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ ํ
์ฑ์ ์คํ๊น์ง ์ด๋ค ๊ณผ์ ์ ํตํด ์ด๋ค์ง๋์ง ์์๋ณด์๋ค.
์ฌ๊ธฐ์๋ถํฐ๋ iOS์ฑ์ ์คํ์ ์ํ, ์คํ ํ ์ํ ๋ฑ์ ์์ธํ ์์๋ณด๊ฒ ๋ค.
์ฑ ์ํ ( App State )
์ฑ์ ์ํ๋ ์ด 3๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค.
1. Not Running
์ฑ์ด ์คํ๋์ง ์์๊ฑฐ๋, ์์ ํ ์ข ๋ฃ๋์ด ์๋ํ์ง ์๋ ์ํ
2. Inactive ( Foreground )
์ฑ์ด ์คํ๋๋ฉด์ Foreground์ ์ง์ ํ์ง๋ง, ์ด๋ค ์ด๋ฒคํธ๋ ๋ฐ์๋์ง ์์ ์ํ์ด๋ค.
์ฑ์ ์ํ ์ ํ๊ณผ์ ์์ ์ ๊น ๋จธ๋ฌด๋ ๋จ๊ณ
3. active ( Foreground )
์ฑ์ด ์คํ์ค์ด๋ฉฐ, Foreground์ ์๊ณ , ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ณ ์๋ ์ํ์ด๋ค.
4. Background
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ์ฑ์ผ๋ก ์ ํ๋์๊ฑฐ๋ ํ๋ฒํผ์ ๋๋ฌ ๋ฐ์ผ๋ก ๋๊ฐ์ ๋์ ์ํ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฉ๋ก App์ ์ผ๋๊ณ ๋ค๋ฅธ App์ ์ฌ์ฉํด๋ ์ฌ์ํ ์์ ์ด ๊ณ์ ์คํ๋๋ ๊ฒฝ์ฐ์ด๋ค.
์ผ์ ์๊ฐ์ด ์ง๋ ์ฑ์ Suspened ์ํ๋ก ๋ฐ๋๊ฒ ๋๋ค.
5. Suspened
์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ์ ์์ง๋ง, ์๋ฌด ์ฝ๋๋ ์คํํ์ง ์์ ์ํ์ด๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋์์ ํน๋ณํ ์์ ์ด ์์ ๊ฒฝ์ฐ Suspened์ํ๊ฐ ๋๋ค.
์ด ์ํ์์ ์ฑ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ๊ฐ์์ง๋ง ์๋ฌด ์ผ๋ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
๋ํ OS์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑํ์์ด ๋ฐ์ํ๋ฉด ์ด ์ํ์ ์ฑ์ ๋ฉ๋ชจ๋ฆฌ์์ ์์ด์ง ์ ์์ผ๋ฉฐ,
์ด๋ ๋ฐ๋ก ์๋์ ํ๊ฑฐ๋ ํ์ง ์๋๋ค.
App Delegate ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ
์ฑ์ ์๋ช ์ฃผ๊ธฐ ์ํ์ ๋ฐ๋ผ์
AppDelegate ๊ฐ์ฒด์ SceneDelegate์์ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
1. Not Running ์ํ์ผ ๋
application(_:willFinishLaunchingWithOptions:)
์ ๋ฉ์๋ ์์๋ ์ฑ์ ์คํํ ๋ ์ต์ด๋ก ์คํํ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ข๋ค.
ํ์ํ ์ฃผ์ ๊ฐ์ฒด๋ค์ ์์ฑํ๊ณ ์ฑ ์คํ ์ค๋น๊ฐ ๋๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
applicationDidFinishLaungching(_:)
์ฑ ์คํ์ ์ํ ๋ชจ๋ ์ค๋น๊ฐ ๋๋ ํ ํ๋ฉด์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
์ฃผ๋ก ์ด๊ธฐํ ์ฝ๋๋ฅผ ์ด๊ณณ์๋ค ์์ฑํ๋ค.
applicationWillTrerminate(_:)
์ฑ์ด ์ข ๋ฃ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
2. In - Active ์ํ์ผ ๋
sceneWillEnterForeground(_:)
์ฑ์ด background๋ not running์์ foreground๋ก ๋ค์ด๊ฐ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
๋นํ์ฑํ ์ํ๋ฅผ ๊ฑฐ์ณ ํ์ฑํ ์ํ๊ฐ ๋๋ค.
sceneWillResignActive(_:)
App Swithcer ๋ชจ๋ ( ํ ๋ฐ ์ธ์ด ์ฌ๋ ธ์ ๊ฒฝ์ฐ ๋๋ ํ ๋ฒํผ ๋ชจ๋ธ ํ๋ฒํผ ๋๋ฒ ๋๋ ์ ๊ฒฝ์ฐ )
3. Active ์ํ ์ผ ๋
sceneDidBecomeActive(_:)
์ฑ์ด ๋นํ์ฑํ ์ํ์์ ํ์ฑ์ํ๋ก ์ง์ ํ๊ณ ๋ ์งํ ํธ์ถ๋๋ค.
์ฑ์ด ์ค์ ๋ก ์ฌ์ฉ๋๊ธฐ ์ ์, ๋ง์ง๋ง์ผ๋ก ์ค๋นํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
4. Background ์ํ ์ผ ๋
sceneDidEnterBackground(_:)
์ฑ์ด background ์ํ๋ก ๋ค์ด๊ฐ์ ๋ ํธ์ถ๋๋ค.
suspened ์ํ๊ฐ ๋๊ธฐ ์ ์ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฑ ์ข ๋ฃํ๊ธฐ ์ ํ์ํ ์์ ์ ํ๋ค.
5. Suspened ์ํ์ผ ๋
๋ฐ๋ก ํธ์ถ๋๋ ๋ฉ์๋๋ ์์ผ๋ฉฐ background ์ํ์์ ํน๋ณํ ์์ ์ด ์์ ๋ ์ด ์ํ๊ฐ ๋๋ค.
iOS 12์ iOS 13์ด์๋ถํฐ ๋์์ ์ฐจ์ด๊ฐ ์๋๋ฐ, ๋จผ์ iOS 12 ๊น์ง์ ๋์์ ์ดํด๋ณด๋ฉด,
~ iOS 12 : SceneDelegate ์์
iOS 13 ~ : SceneDelegate ์์
iOS 12๊น์ง์ ๋์ ( Scene์ ์ง์ ํ์ง ์๋ ๊ฒฝ์ฐ )
iOS 12๊น์ง๋ SceneDelegate๊ฐ ์๋ค. ( iOS 13๋ถํฐ ์กด์ฌ )
Scene๋ฅผ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ, ๋ชจ๋ ์๋ช ์ฃผ๊ธฐ ๊ด๋ จ ์ด๋ฒคํธ๋ค์ appDelegate์ ์ ๋ฌ๋๋ค.
๊ฐ๊ฐ์ ์ํ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ์ผ์ด AppDelegate.swift ์ด๋ค.
iOS์ฑ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด AppDelegate.swift ํ์ผ์ด ์๋์ผ๋ก ์์ฑ๋์ด ์๋ค.
AppDelegate๋ ์ด๋ฆ ๊ทธ๋๋ก ์ฑ๊ณผ ์์คํ ์ ์ฐ๊ฒฐ์ ์ํด ํ์ํ delegate ๋ฉ์๋๋ฅผ ๋ด๊ณ ์๋ค.
iOS 13๋ถํฐ์ ๋์ ( Scene๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ )
SceneDelegate๋ iOS13๋ถํฐ ์ถ๊ฐ๋ ํด๋์ค์ด๋ค.
SceneDelegate๋ UI ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค์ด๋ค.
iOS12 ๊น์ง๋ ํ๋์ ์ฑ์ด ํ๋์ ์๋์ฐ(Window)๋ง ๊ฐ์ง๊ธฐ ๋๋ฌธ์
AppDelegate ํด๋์ค๊ฐ UI ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๊น์ง ํ๋ค.
ํ์ง๋ง iOS13๋ถํฐ ํ๋์ ์ฑ์ ์ฌ๋ฌ ๊ฐ์ ์๋์ฐ(Window)๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์
UI์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ๋ด ๊ด๋ฆฌํด์ค ํด๋์ค๊ฐ ํ์ํด์ก๋ค.
์ด๋ฅผ ์ํด ์ถ๊ฐ๋ ํด๋์ค๊ฐ SceneDelegate์ด๋ค.
์ฆ, Scene๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ Scene๋ณ๋ก ๋ณ๋์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
scene ํ๋๋ ๋๋ฐ์ด์ค์์ ๋์๊ฐ๋ ์ฑ์ UI์ธ์คํด์ค ํ๋๋ฅผ ๋ํ๋ธ๋ค.
ํ๋์ ์ฑ์ ์ฌ๋ฌ๊ฐ์ scene์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋์ฐ๊ฑฐ๋ ์จ๊ธธ ์ ์๋ค.
์ฌ์ฉ์๋ ์์คํ ์ด ์๋ก์ด scene๋ฅผ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ์์ฒญํ๋ฉด, UIKit์ ์ด๋ฅผ ๋ง๋ค์ด unattahced ์ํ๋ก ๋ง๋ ๋ค.
์ฌ์ฉ์๊ฐ ์์ฒญํ scene์ ๊ณง์ฅ foreground inactive ์ํ๋ฅผ ๊ฑฐ์ณ active์ํ๊ฐ ๋๊ณ ,
์์คํ ์ด ์์ฒญํ scene์ ๋ณดํต background ์ํ๊ฐ ๋์ด
์ด๋ฒคํธ ์ฒ๋ฆฌํ ๋ค์ foreground๋ก ์ฌ๋ผ์จ๋ค.
์ ๋ฆฌ
[ ์ฑ์ ์ํ 5๊ฐ์ง ]
- Not Running : ์ฑ์ด ์คํ๋์ง ์๋ ์ํ
- Inactive : ์ฑ์ด ์คํ ์ค์ธ ์ํ, ๊ทธ๋ฌ๋ ์๋ฌด๋ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ง ์๋ ์ํ
- Active : ์ฑ์ด ์คํ์ค์ด๋ฉฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ํ
- Background : ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋ ์ํ, ๊ทธ๋ฌ๋ ์คํ๋๋ ์ฝ๋๊ฐ ์๋ ์ํ
- Suspened : ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๊ณ ์คํ๋๋ ์ฝ๋๊ฐ ์๋ ์ํ
[ delegate ํจ์๋ฅผ ํตํด, ์ฑ์ด ํน์ ์ํ์์ ๋์ํ๋ ๋ก์ง ๊ตฌํ ]
// ์ฑ์ด ์ฒ์ ์์๋ ๋ ์คํ
application (_: didFinishLaunching:)
// ์ฑ์ด active์์ inactive๋ก ์ด๋๋ ๋ ์คํ
applicationWillResignActive :
// ์ฑ์ด background ์ํ์ผ ๋ ์คํ
applicationDidEnterBackground:
// ์ฑ์ด background์์ foreground๋ก ์ด๋๋ ๋ ์คํ
// (์์ง foreground์์ ์คํ์ค์ด์ง ์์ )
applicationWillEnterForeground:
// ์ฑ์ด active์ํ๊ฐ ๋์ด ์คํ์ค์ผ ๋
applicationDidBecomeActive:
// ์ฑ์ด ์ข ๋ฃ๋ ๋ ์คํ
applicationWillTerminate:
'๐ iOS > UIKit' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] Clean Build Folder (0) | 2023.11.24 |
---|---|
[iOS][UiKit] Navigation BackButton ( ์ฌ๋ผ์ง๋ ํ์, ํ์ดํ๋ง ํ์ ) (0) | 2023.06.14 |
[iOS][UiKit] SnapKit ์ ๋ฆฌ ( inset/offset , translates~ ) (0) | 2023.06.09 |
[iOS] Cell ๊ทธ๋ฆผ์ + ๋ฅ๊ธ๊ฒ ( shadow, cornerRadius ) (0) | 2023.05.23 |
[iOS] Delegate ํจํด์ ๋ํด์ (0) | 2023.04.05 |