Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- escaping
- Observer
- protocol
- PushNotification
- Git
- self
- Refresh
- apns
- uikit
- NotificationCenter
- http
- mvvm
- 화면전환
- viewlifecycle
- struct
- calendar
- singleton
- class
- 회고
- 글또
- list
- error
- ScrollView
- Switch
- SWIFTUI
- IOS
- segue
- array
- 고차함수
- SWIFT
Archives
- Today
- Total
seong_hye, the developer
SwiftUI) View Life Cycle 본문
📘 SwiftUI - View Life Cycle
SwiftUI의 View는 선언형(Declarative) 방식이기 때문에 UIKit과는 전혀 다른 생명주기를 가지고 있음
SwiftUI는 상태(State)나 환경(Environment)의 변화에 따라 뷰를 다시 생성하고 그리기 때문에
UIKit처럼 언제 뷰가 생성되고 사라지는가보다는 상태 변화에 따라 어떤 동작을 해야 하는가에 초점이 맞춰져 있음
🔹SwiftUI View Lifecycle 핵심 개념
개념 | 설명 |
상태 기반 | @State, @Binding, @ObservedObject 등이 바뀌면 뷰가 재계산(re-render)됨 |
구조체 뷰 | SwiftUI의 View는 구조체라서 상태 변경 시마다 새로운 뷰가 생성되는 것처럼 보임 |
시스템 주도 | 뷰 생성 / 파괴 시점을 직접 제어하지 않음 |
명확한 진입점 | onAppear, onDisappear 등으로 뷰의 생명주기를 감지 |
🔹기본 생명주기 메서드
메서드 | 설명 |
onAppear {} | 뷰가 처음 나타날 때 또는 다시 보일 때마다 호출 |
onDisappear {} | 뷰가 사라질 때 호출됨 |
onChange(of:) {} | 특정 상태 값이 변경되었을 때 반응 |
task {} | 비동기 작업 전용 (iOS 15+) |
🔍 onAppear & onDisappear 예제
탭 전환, 화면 전환 등으로 나타나거나 사라질 때마다 호출됨
struct ContentView: View {
var body: some View {
Text("Hello")
.onAppear {
print("화면에 나타남")
}
.onDisappear {
print("화면에서 사라짐")
}
}
}
🔍 onChange (of:) 예제
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack {
Button("증가") { count += 1 }
}
.onChange(of: count) { newValue in
print("카운트 값이 바뀜 \(newValue))
}
}
}
🔍 task (비동기 작업)
struct ContentView: View {
@State private var message = ""
var body: some View {
Text(message)
.task {
message = await loadData()
}
}
func loadData() async -> String {
try? await Task.sleep(nanoseconds: 1_000_000_000)
return "완료됨"
}
}
🔹SwiftUI 생명주기 흐름 요약
1. View 구조체 생성
2. body 평가 -> 뷰 계층 생성
3. onAppear 실행 (화면에 나타날 때)
4. 상태 변경 ( State, Binding 등 )
5. View 구조체 재생성
6. body 다시 평가 -> 변경된 뷰만 업데이트
7. 뷰가 사라질 때 onDisappear 실행
📌 상태가 바뀔 때마다 뷰는 다시 계산됨
하지만 실제 뷰 그리기(렌더링)는 효율적으로 처리됨
🔹SwiftUI vs UIKit 생명주기 비교
항목 | UIKit | SwiftUI |
뷰 생성 | init(), loadView() | 상태 변화에 따라 구조체 다시 생성 |
화면에 표시될 때 | viewWillAppear, viewDidAppear | onAppear() |
화면에서 사라질 때 | viewWillDisappear, viewDidDisappear | onDisappear() |
데이터 변경 감지 | X (Notification, KVO 등 필요) | O (@State, @ObservedObject, onChange(of:)) |
생명주기 흐름 | 명령형 | 선언형, 상태 기반 |
'IOS > SwiftUI' 카테고리의 다른 글
Swift) DarkMode 활용하기(ColorScheme) (0) | 2022.11.03 |
---|---|
SwiftUI) Toast 생성해보기(normal, enum에 따른 toast) (0) | 2022.10.29 |
SwiftUI) App Protocol에 대해 알아보기 (0) | 2022.10.25 |
SwiftUI) 버튼 활용해 화면 맨 위로 올라오기 (0) | 2022.10.18 |
SwiftUI) Picker & DatePicker 사용하기 (0) | 2022.08.31 |
Comments