-
[iOS] Managing Your App's Life Cycle (곡μλ¬Έμ μ 리)iOS/π€ App 2021. 1. 26. 21:17
1μ°¨ μμ : 2021/06/16
μλ νμΈμπΆ
μ΄λ² μκ°μλ 'Managing Your App's Life Cycle', μ¦ μ±μ μλͺ μ£ΌκΈ°λ₯Ό λ€λ£¬ 곡μλ¬Έμλ₯Ό μ 리ν΄λ³΄λ €κ³ ν©λλ€.
μ±μ μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬νλ κ²μ
μ±μ μνμ λ°λΌ λ°μνλ `system notification` μ μλ΅νκ³ ,
λ€λ₯Έ μ€μν μμ€ν κ΄λ ¨ μ΄λ²€νΈλ€μ μ²λ¦¬νλ κ²μ΄λΌκ³ λ³Ό μ μμ΅λλ€.
μ±μ μν
μ±μ νμ¬ μν(state) μ λ°λΌ ν μ μλ λμλ€μ΄ μ ν΄μ Έμμ΅λλ€.
μλ₯Ό λ€μ΄ `foreground` μνμ μ±μ μ¬μ©μμ μ£Όμλ₯Ό λκ³ μμΌλ―λ‘, CPUλ₯Ό ν¬ν¨ν μμ€ν μμμ λν μ°μ κΆμ κ°μ§κ³ μμ΅λλ€.
λ°λλ‘ `background`μνμΈ μ±μ μμ μ μμ νμ§ μκ±°λ, κ°λ₯ν μ κ² ν΄μΌ ν©λλ€.
:: νλ©΄μμ 보μ΄μ§ μλ μνμ΄κΈ° λλ¬Έμ λλ€.
μμ μ΄μ λ‘, μ±μ μνκ° λ³κ²½λ λλ§λ€ μ±μ λμμ μ μ νκ² μ‘°μ ν΄μΌ ν©λλ€.
μ±μ μνκ° λ³κ²½λλ©΄, UIKitμ μ μ ν delegate methodλ₯Ό νΈμΆνμ¬ μ°λ¦¬μκ² μλ €μ€λλ€.
iOS 13 νΉμ κ·Έ μ΄ν λ²μ μ΄λΌλ©΄, UISceneDelagate μ€λΈμ νΈλ₯Ό μ΄μ©νμ¬ `scene-based` μ±μ life-cycle μ΄λ²€νΈλ₯Ό μ²λ¦¬ν©λλ€.
UIScenceDelegate λ λ©ν° μλμ° ( κ°μ μ±μ μ¬λ¬κ° μ°½μ λμ°λ ) κΈ°λ₯κ³Ό κ΄λ ¨μ΄ μμ΅λλ€.
λ€μ λ§νλ©΄, μ± UI μΈμ€ν΄μ€λ₯Ό ν κ°κ° μλ λ κ° μ΄μμ λμΈμ μκ² μ§μν΄μ£Όλ νλ‘ν μ½μ λλ€.
π‘μ κΈ°λ₯μ΄ νμ μλ€λ©΄ info.plist μ μμ κ³Ό μΆκ°μ μΈ μμ μ ν΅ν΄ iOS 13 μ΄νμ λ²μ μ΄λΌλ UISceneDelegate μ μ¬μ©νμ§ μμ μ μμ΅λλ€.
iOS 12 νΉμ κ·Έ μ΄μ λ²μ μ΄λΌλ©΄, UIApplicationDelegate μ€λΈμ νΈλ₯Ό μ΄μ©νμ¬ life-cycle μ΄λ²€νΈλ₯Ό μ²λ¦¬ν©λλ€
App-Based Life-Cycleπ‘π‘
βοΈ iOS κ°λ°μμκ²λ essential of essentials μ λλ€ βοΈ
iOS12 μ΄ν λ²μ , κ·Έλ¦¬κ³ Scene μ μ§μνμ§ μλ μ±μ ν΄λΉνλ μλͺ μ£ΌκΈ° μ λλ€. (App-Based Life-Cycle)
μ¬κΈ°μλ UIKit μ΄ λͺ¨λ μλͺ μ£ΌκΈ° κ΄λ ¨ μ΄λ²€νΈλ₯Ό UIApplicationDelegate μ μ λ¬ν©λλ€.
App delegate κ° λΆλ¦¬λμ΄ μλ μ€ν¬λ¦° ( μΈμ₯μΌλ‘ μ°κ²°λ μ€ν¬λ¦° ) μ ν¬ν¨ν λͺ¨λ μ±μ window λ₯Ό κ΄λ¦¬ν©λλ€.
:: μλ₯Ό λ€μ΄ κ²μ νλ©΄μ μΈμ₯ λͺ¨λν°μμ λμ€κ³ , νΈλν° νλ©΄ μμ²΄κ° μ»¨νΈλ‘€λ¬κ° λλ λ°©μμ μ±μ΄λΌλμ§
κ²°κ³Όμ μΌλ‘ μ±μ μνλ³νκ° μ±μ μ 체 UI μ μν₯μ μ€λλ€.
μλ κ·Έλ¦Όμ App delegate μ€λΈμ νΈμ μ°κ΄μ΄ μλ μ±μ μν λ³νλ₯Ό ννν κ·Έλ¦Όμ λλ€.
μ΅μ΄ μ€νλ μ΄ν, iOS λ μ±μ Inactive νΉμ Background μνμ λμ΅λλ€.
μ μνλ μ± UI κ° νλ©΄μ νμλμ΄μλ μ¬λΆλ‘ κ²°μ λ©λλ€.
Foreground, μ¦ νλ©΄μ νμλλ μνλ‘ μ±μ΄ μ€νλλ€λ©΄, iOS λ μλμΌλ‘ μ±μ μνλ₯Ό active λ‘ μ νν©λλ€.
κ·Έ μ΄ν, μ±μ΄ μ΅μ’ μ’ λ£λκΈ° μ κΉμ§ μ±μ μνλ active μ background μ¬μ΄μμ μ νμ λ°λ³΅ν©λλ€.
κ΄λ ¨ λ¬Έμλ₯Ό μΆκ°μ μΌλ‘ μ 리νμμ΅λλ€ π₯³
[iOS] Responding to the Launch of Your App (곡μλ¬Έμ μ 리)
βοΈ μλ λ΄μ©μ μ΅μ ν λμ§ μμμΌλ©°, Scene μ μ¬μ©νλ μμ μ μμ ν κ³νμ λλ€. βοΈ
Respond to Scene-Based Life-Cycle Events
λ§μ½ μ±μ΄ 볡μ κ°μ sceneμ μ§μνλ€λ©΄, UIKit μ κ°κ°μ life-cycle μ΄λ²€νΈλ₯Ό λ°λ‘ μ λ¬ν©λλ€.
ν κ°μ Scene μ κΈ°κΈ°μμ μ€νλκ³ μλ μ± UIμ μΈμ€ν΄μ€ ν κ° λ₯Ό λνλ λλ€.
μ¬μ©μλ κ°κ°μ μ±λ§λ€ μ¬λ¬ κ°μ sceneμ λ§λ€ μ μκ³ , λ°λ‘λ°λ‘ 보μ¬μ£Όκ±°λ μ¨κΈΈ μ μμ΅λλ€.
κ°κ°μ sceneμ΄ κ°κ°μ κ³ μ ν life-cycle μ κ°μ§κ³ μκΈ° λλ¬Έμ, μ λ§λ€ μ€ν μ€ μνκ° λ€λ₯Ό μ μμ΅λλ€.
μλ₯Ό λ€μ΄ ν κ°μ scene μ `foreground` μ΄λ©΄μ λμμ λ€λ₯Έ sceneλ€μ `background`μ΄κ±°λ `suspended` μΌ μ μμ΅λλ€.
Important
Scene supprtλ μ ν-μΆκ° κΈ°λ₯μ λλ€.
κΈ°λ³Έμ μΈ supportλ₯Ό νμ±νμν€λ €λ©΄, Info.plist μ UIApplicationSceneManifest ν€λ₯Ό μΆκ°ν΄μΌ ν©λλ€.
κ΄λ ¨ κΈ : Specifying the Scenes Your App Supports
νλμ κΈ°κΈ°μμ ν νλ©΄μ λμμ κ°μ μ±μ μ¬λ¬ κ° μΌλλ κΈ°λ₯μ λλ€.
μλ κ·Έλ¦Όμ μ¬μ μν μ΄λ (state transitions) λ₯Ό 보μ¬μ€λλ€.
μ¬μ©μλ μμ€ν μ΄ μ°λ¦¬μ μ±μ μλ‘μ΄ μ¬μ μꡬνλ€λ©΄, UIKit μ κ·Έκ²μ μμ±νκ³ κ·Έκ²μ `unattached` μνλ‘ λ§λλλ€.
μ΄λλ μ¬μ΄ μ΄λ€ μ±κ³Ό μ°κ²°λμ΄ μμ§ μμ μμν μ¬ μνμ λλ€.
μ¬μ©μ μμ² μ¬ μ λΉ λ₯΄κ² νλ©΄ μμ λνλκ² λλ `foreground`μνλ‘ μ΄λν©λλ€.
μμ€ν μμ² μ¬μ `background`λ‘ μ΄λνμ¬ μ΄λ²€νΈλ₯Ό μ²λ¦¬νκ² λ©λλ€.
μλ₯Ό λ€μ΄, μμ€ν μ λ³΄ν΅ location event λ₯Ό μ²λ¦¬νκΈ° μν΄ μ¬μ `background`μμ μμν©λλ€.
μ¬μ©μκ° μ± UI λ₯Ό νλ©΄μμ μμ λ²λ Έμ λ ( dismiss ) , UIKitμ κ΄λ ¨ μ¬μ `background` μνλ‘ λ°κΎΈκ³ κ²°κ΅μλ `suspended` μνμ λμ΅λλ€.
UIKitμ `background` λ `suspended` μνμ μ¬μ μΈμ λ μ§ μ°κ²° ν΄μ (disconnect) μν¬ μ μλλ°, κ·Έ μ¬λ€μ΄ μ°¨μ§νκ³ μλ μμμ κ°μ Έμμ, `unattached` μνμ μ¬μκ² λΆμ¬νκΈ° μν¨μ λλ€.
μ°κ²° ν΄μ λ μ¬κ³Ό μ± κ°μ μ°κ²°μ΄ ν΄μ λ¨μ μλ―Ένλ κ² κ°μ΅λλ€. κ·Έλ λ€λ©΄ ν΄λΉ μ¬μ λ€μ unattached μνκ° λ κ²μ λλ€.
κ·Έλ°λ°, Foreground μμμλ Inactive μνμ Active μνκ° κ΅¬λΆλμ΄ μμ΅λλ€. μ΄κ²λ€μ μ°¨μ΄λ 무μμΌκΉμ?
λ€μ μμ λ€μ μννκΈ° μν΄ μ¬μ μ νμ μ¬μ©ν©λλ€:
- UIKit μ΄ μ¬μ μ°λ¦¬μ μ±κ³Ό μ°κ²°ν λ, μ¬μ μ΅μ΄ UIλ₯Ό ꡬμ±νκ³ μ¬μ΄ νμλ‘ νλ λ°μ΄ν°λ₯Ό λΆλ¬μ€μΈμ.
- `foreground-active` μνλ‘ μ νν λ, UIλ₯Ό ꡬμ±νκ³ , μ¬μ©μμμ μνΈμμ©μ μ€λΉνμΈμ.
- `foreground-active` μνμμ `~inactive` μνλ‘ μ ννλ©΄μ, λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ±μ λμμ μ΅μν (quiet) νμΈμ.
- `background` μνλ‘ μ§μ νλ©΄μ, μ€μν μμ μ λλ΄κ³ , λ©λͺ¨λ¦¬λ₯Ό κ°λ₯ν λ§μ΄ ν΄μ νκ³ , μ± Snapshot μ μ€λΉνμΈμ.
- UIKit μ΄ μ¬μ μ°λ¦¬μ μ±κ³Ό μ°κ²° ν΄μ ν λ, μ¬κ³Ό κ΄λ ¨λ 곡μ μμμ ν΄μ νμΈμ.
- μ¬-κ΄λ ¨ μ΄λ²€νΈμμ μΆκ°μ μΌλ‘, μ°λ¦¬λ μ°λ¦¬μ μ±μ΄ μμν λ UIApplicationDelegate λ₯Ό μ¬μ©νμ¬ λ°μν΄μΌ ν©λλ€.
Respond to Other Significant Events
life-cycle μ΄λ²€νΈ μ²λ¦¬ μ΄μΈμ μΆκ°μ μΌλ‘, μ±μ μλ νμ μλ μ΄λ²€νΈλ€μ μ²λ¦¬λ μ€λΉν΄λμμΌ ν©λλ€.
UIApplicationDelegate μ€λΈμ νΈλ₯Ό μ΄μ©νμ¬ λλΆλΆμ μ΄λ²€νΈλ€μ λ€λ£Ήλλ€.
λͺλͺμ κ²½μ°, notification μ μ΄μ©ν΄ μ±μ λ€λ₯Έ λΆλΆμμ κ·Έκ²λ€μ λ°μνκ² ν μ λ μμ΅λλ€.
Memory warnings Received when your app’s memory usage is too high. Reduce the amount of memory your app uses; see Responding to Memory Warnings. Protected data becomes available/unavailable Received when the user locks or unlocks their device. See applicationProtectedDataDidBecomeAvailable(_:) and applicationProtectedDataWillBecomeUnavailable(_:). Handoff tasks Received when an NSUserActivity object needs to be processed. See application(_:didUpdate:). Time changes Received for several different time changes, such as when the phone carrier sends a time update. See applicationSignificantTimeChange(_:). Open URLs Received when your app needs to open a resource. See application(_:open:options:). λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.'iOS > π€ App' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS] UIApplication μ΄λ? (0) 2021.01.28 [iOS] Responding to the Launch of Your App (곡μλ¬Έμ μ 리) (0) 2021.01.28 Review of Implement a Custom Control (2) - Food Tracker (0) 2021.01.22 Review of Implement a Custom Control (1) - FoodTracker (0) 2021.01.21 Review of Work with View Controllers (2) - Food Tracker (0) 2021.01.19