
SwiftUI의 공식 문서를 보면 life cycle에 관해 아래와 같이 설명되어있다.

SwiftUI는 UIkit과 다르게 크게 두 가지의 life cycle 뿐인데,
onAppear() 는 View가 나타낼 때 수행된다.
이는 UIkit의 viewDidAppear() 과 동일하다.
onDisappear() 는 View가 사라질 때 수행된다.
이는 UIkit의 viewDidDisappear() 과 동일하다.
위와 같이 두 개의 life cycle이 있는데, iOS 15에 task()가 추가됐다.
task() 는 onAppear()과 비슷하게 View가 나타낼 때 수행된다.
다만, task() 는 비동기 작업을 수행하게 되는데, task()가 onAppear()에 비해 좋은점은,
task()는 modifier로 추가된 View의 수명과 일치하는 수명을 가진다.
즉, task()의 넣은 작업이 완료되기 전에 View가 사라지면 SwiftUI가 task()에 있던 작업을 취소해준다.
반면, UIkit의 View life cycle은 SwiftUI보다 아래 그림과 같이 세분화 되어있다.

컨트롤러가 관리하는 뷰를 만드는 역할을 한다. 뷰를 만들고 메모리에 올린다. 이후 viewDidLoad가 호출된다.
이 메서드를 직접 호출하면 안된다.
ViewController가 메모리에 로드된 후 호출된다. 특별한 경우가 아니라면 딱 한번 실행되기 때문에 초기화할 때 사용할 수 있다.
뷰가 생성되기 직전에 실행된다. 뷰가 나타나기 전에 실행해야 하는 작업들을 여기서 한다.
또는 네비게이션 컨트롤러에서 다른뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 로직을 위치시킨다. A뷰에서 B뷰에 갔다가 다시 A뷰로 이동하는 경우 A뷰는 이미 메모리에 로드되었기 때문에 viewDidLoad는 호출되지 않고, viewWillAppear가 호출된다.
뷰가 생성된 후 실행된다. 데이터를 받아서 화면에 뿌려주거나 애니메이션 등의 작업을 하는 로직을 위치시킬 수 있다.
viewWillAppear에서 로직을 넣었다가 뷰에 반영이 안되는 경우가 있기 때문이다.
뷰가 사라지기 직전에 실행된다.
뷰가 사라진 후 실행된다.
메모리에서 해제될 때 실행된다.
responding-to-view-life-cycle-updates
SwiftUI, iOS 15+ ) onAppear()대신 task()
iOS. View Life Cycle