λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS

[UIKit] μ•±μ˜ 라이프 사이클

by hyebin (Helia) 2022. 3. 22.
λ°˜μ‘ν˜•

앱은 ν˜„μž¬ μƒνƒœμ— λ”°λΌμ„œ ν•  수 μžˆλŠ” μž‘μ—…κ³Ό ν•  수 μ—†λŠ” μž‘μ—…μ΄ κ²°μ •λ©λ‹ˆλ‹€.

κ°œλ°œμžλŠ” μ•±μ˜ μƒνƒœκ°€ λ³€ν™”ν•  λ•Œλ§ˆλ‹€ μ•±μ˜ λ™μž‘μ„ μ μ ˆν•˜κ²Œ μ‘°μ ˆν•΄μ£Όμ–΄μ•Ό ν•΄μ•Ό ν•©λ‹ˆλ‹€.

UIKit은 delegate 객체의 λ©”μ„œλ“œλ₯Ό 적절히 ν˜ΈμΆœν•˜μ—¬ μ•±μ˜ μƒνƒœκ°€ λ³€ν™”ν–ˆμŒμ„ μ•Œλ €μ€λ‹ˆλ‹€.

 


Scene 기반 라이프 사이클 μ΄λ²€νŠΈμ— λŒ€μ‘

Scene을 μ§€μ›ν•˜λŠ” μ•±μ—μ„œ UIKit은 라이프 사이클 μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ 각각의 이벀트λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.

  • Scene:  κΈ°κΈ°μ—μ„œ μ‹€ν–‰λ˜λŠ” μ•± UI의 μΈμŠ€ν„΄μŠ€ ν•˜λ‚˜

μ‚¬μš©μžλŠ” 각 μ•±μ—μ„œ μ—¬λŸ¬ 개의 scene을 생성할 수 있으며, 각각의 scene을 λ…λ¦½μ μœΌλ‘œ μˆ¨κΈ°κ±°λ‚˜ 보이게 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

각 scene은 고유의 라이프 사이클을 κ°€μ§€κ³  있기 λ•Œλ¬Έμ— μ„œλ‘œ λ‹€λ₯Έ μ‹€ν–‰ μƒνƒœμ— μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

Scene은 κΈ°λ³Έ μ˜΅μ…˜μ΄ μ•„λ‹ˆλΌ λ”°λ‘œ 섀정을 ν•΄μ•Ό μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
κΈ°λ³Έ 섀정을 ν™œμ„±ν™” ν•˜κΈ° μœ„ν•΄μ„œλŠ” Info.plist νŒŒμΌμ—μ„œ UIApplicationSceneManifest ν‚€λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒ 그림은 sceneλ“€μ˜ μƒνƒœ μ „ν™˜μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

  • μ‚¬μš©μžλ‚˜ μ‹œμŠ€ν…œμ΄ 앱에 μƒˆλ‘œμš΄ scene을 μš”μ²­ν•˜λ©΄ UIKit은 scene을 μƒμ„±ν•˜κ³  Unattached μƒνƒœλ‘œ λ‘‘λ‹ˆλ‹€. 
  • μ‚¬μš©μžκ°€ μš”μ²­ν•œ scene은 λΉ λ₯΄κ²Œ foreground둜 μ „ν™˜λ˜μ–΄ 화면에 λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œμ΄ μš”μ²­ν•œ scene은 보톡 background둜 μ΄λ™ν•˜μ—¬ 이벀트λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • μ‚¬μš©μžκ°€ μ•±μ˜ UIλ₯Ό λ‹«μœΌλ©΄ UIKit은 κ΄€λ ¨λœ scene을 background μƒνƒœλ‘œ μ΄λ™μ‹œν‚€κ³ , μ΅œμ’…μ μœΌλ‘œλŠ” 쀑단 μƒνƒœλ‘œ λ§Œλ“­λ‹ˆλ‹€.
  • UIKit은 λ¦¬μ†ŒμŠ€ λ°˜ν™˜μ„ μš”κ΅¬λ°›μœΌλ©΄ μ–Έμ œλ“ μ§€ backgroun λ˜λŠ” μ€‘λ‹¨λœ scene의 연결을 끊고 unattached μƒνƒœλ‘œ λ˜λŒλ €λ†“μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

Scene μ „ν™˜μ„ μ‚¬μš©ν•˜μ—¬ λ‹€μŒ μž‘μ—…λ“€μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • UIKit이 scene을 앱에 μ—°κ²°ν•  λ•Œ scene의 졜초 UIλ₯Ό κ΅¬μ„±ν•˜κ³  scene에 ν•„μš”ν•œ 데이터λ₯Ό λ‘œλ“œν•©λ‹ˆλ‹€.
  • Forground-active μƒνƒœλ‘œ μ „ν™˜λ  λ•Œ UIλ₯Ό κ΅¬μ„±ν•˜κ³  μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•  μ€€λΉ„λ₯Ό ν•©λ‹ˆλ‹€.
  • Foreground-active μƒνƒœλ₯Ό λ²—μ–΄λ‚˜λ©΄ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ•± λ™μž‘μ„ μ€‘λ‹¨μ‹œν‚΅λ‹ˆλ‹€.
  • Background μƒνƒœμ— μ§„μž… μ‹œ μ€‘μš”ν•œ μž‘μ—…μ„ 끝마치고, μ΅œλŒ€ν•œ λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό ν™•λ³΄ν•˜κ³ , μ•± μŠ€λƒ…μƒ·μ„ μ€€λΉ„ν•©λ‹ˆλ‹€.
  • Scene의 연결이 끊기면 sceneκ³Ό κ΄€λ ¨λœ 곡유 λ¦¬μ†ŒμŠ€λ₯Ό μ •λ¦¬ν•©λ‹ˆλ‹€.
  • sceneκ³Ό κ΄€λ ¨λœ 이벀트 외에, 앱이 싀행될 λ•Œμ—λ„ UIApplicationDelegateλ₯Ό 톡해 응닡을 ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

App 기반 라이프 사이클 μ΄λ²€νŠΈμ— λŒ€μ‘ν•˜κΈ°

iOS 12 버전 μ΄ν•˜μ™€  scene을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ•±μ—μ„œ, UIKit은 λͺ¨λ“  라이프 사이클 이벀트λ₯Ό UIApplicationDelegate 객체λ₯Ό 톡해 μ „λ‹¬ν•©λ‹ˆλ‹€. App delegateλŠ” λΆ„λ¦¬λœ μŠ€ν¬λ¦°μ— ν‘œμ‹œλ˜λŠ” κ²ƒκΉŒμ§€ ν¬ν•¨ν•˜μ—¬ μ•±μ˜ λͺ¨λ“  windowλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

결과적으둜, μ•± μƒνƒœ μ „ν™˜μ€ μ™ΈλΆ€ λ””μŠ€ν”Œλ ˆμ΄μ— ν‘œμ‹œλ˜λŠ” μ½˜ν…μΈ λ₯Ό ν¬ν•¨ν•˜μ—¬ μ•±μ˜ 전체 UI에 영ν–₯을 μ€λ‹ˆλ‹€.

 

λ‹€μŒ 그림은 app delegate 객체와 κ΄€λ ¨λœ μƒνƒœ μ „ν™˜μ„ 보여주고 μžˆμŠ΅λ‹ˆλ‹€.

  • μ‹€ν–‰ 이후, μ‹œμŠ€ν…œμ€ 앱이 μŠ€ν¬λ¦°μ— λ‚˜νƒ€λ‚˜λŠ”μ§€ 여뢀에 λ”°λΌμ„œ 앱을 λΉ„ν™œμ„± λ˜λŠ” background μƒνƒœλ‘œ λ§Œλ“­λ‹ˆλ‹€.
  • foreground둜 μ‹€ν–‰ν•  μ‹œ, μ‹œμŠ€ν…œμ€ μžλ™μœΌλ‘œ 앱을 ν™œμ„±ν™” μƒνƒœλ‘œ μ „ν™˜μ‹œν‚΅λ‹ˆλ‹€.
  • κ·Έ 이후 μ’…λ£Œλ  λ•ŒκΉŒμ§€ 앱은 active와 background μƒνƒœ 사이λ₯Ό μ˜€κ°‘λ‹ˆλ‹€.

App μ „ν™˜μ„ μ‚¬μš©ν•˜μ—¬ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • μ‹€ν–‰ μ‹œ μ•±μ˜ 데이터 ꡬ쑰화 UIλ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.
  • ν™œμ„±ν™” μ‹œ UI ꡬ성을 마치고 μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ„ μ€€λΉ„ν•©λ‹ˆλ‹€.
  • λΉ„ν™œμ„±ν™” μ‹œ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ•±μ˜ λ™μž‘μ„ μ€‘λ‹¨ν•©λ‹ˆλ‹€.
  • Background μƒνƒœλ‘œ μ „ν™˜ μ‹œ μ€‘μš”ν•œ μž‘μ—…μ„ 마치고, μ΅œλŒ€ν•œ λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό ν™•λ³΄ν•˜κ³ , μ•± μŠ€λƒ…μƒ·μ„ μ€€λΉ„ν•©λ‹ˆλ‹€.
  • μ’…λ£Œ μ‹œ λͺ¨λ“  μž‘μ—…μ„ μ¦‰μ‹œ μ€‘λ‹¨ν•˜κ³  곡유 λ¦¬μ†ŒμŠ€λ₯Ό ν•΄μ œν•©λ‹ˆλ‹€.

 

기타 μ€‘μš”ν•œ μ΄λ²€νŠΈμ— μ‘λ‹΅ν•˜κΈ°

앱은 라이프 사이클 이벀트뿐만 μ•„λ‹ˆλΌ λ‹€μŒ ν…Œμ΄λΈ”μ— λ‚˜μ—΄λœ μ΄λ²€νŠΈλ“€λ„ μ²˜λ¦¬ν•  μ€€λΉ„κ°€ λΌμžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

UIApplicationDelegate 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ 이벀트의 λŒ€λ‹€μˆ˜λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

κ²½μš°μ— 따라 notification을 μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Memory Warning μ•±μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ λ„ˆλ¬΄ λ§Žμ„ 경우 λ°›λŠ” λ©”μ„Έμ§€
Protected data becomes available/unavailable
μ‚¬μš©μžκ°€ κΈ°κΈ°λ₯Ό μž κ·Έκ±°λ‚˜, μž κΈˆμ„ ν•΄μ œν•  λ•Œ λ°›λŠ” λ©”μ„Έμ§€
Handoff tasks NSUserActivity 객체의 μ²˜λ¦¬κ°€ ν•„μš”ν•  λ•Œ λ°›λŠ” λ©”μ„Έμ§€
Time changes 톡신사 μ‹œκ°„ μ—…λ°μ΄νŠΈ λ“±μ˜ 이유둜 μ‹œκ°„ λ³€ν™”κ°€ λ°œμƒν•  λ•Œ λ°›λŠ” λ©”μ„Έμ§€
Open URLs μ•±μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μ—΄μ–΄μ•Ό ν•  λ•Œ μˆ˜μ‹ λ˜λŠ” λ©”μ„Έμ§€

 

λ°˜μ‘ν˜•

'🍎 iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[UIKit] UIView(3)  (0) 2022.03.30
[UIKit] UIView(2)  (0) 2022.03.28
[UIKit] UIView(1)  (0) 2022.03.25
[UIKit] UIApplication  (0) 2022.03.24
UIKit  (0) 2022.03.21