https://zeddios.tistory.com/43
https://zeddios.tistory.com/44
위 Zedd님의 글에서 이미지의 내용을 살펴보겠습니다. 첫 번째 View Controller에서 두 번째 View Controller로 이동, 다시 첫 번째 View Controller로 이동할 때 호출되는 함수의 순서를 보여줍니다. 아래 내용을 읽기 전에 viewDidLoad는 메모리에 올려질 때 호출된다는 점을 기억하면 좋습니다.
1st viewDidLoad
1st viewWillAppear
1st viewDidAppear
========================
1st viewWillDisappear
2nd viewDidLoad
2nd viewWillAppear
1st viewDidDisappear
2nd viewDidAppear
========================
2nd viewWillDisappear
1st viewWillAppear
2nd viewDidDisappear
1st viewDidAppear
개별 View Controller를 순서대로 잘라서 정리하면 아래와 같습니다.
첫 번째 View Controller
1st viewDidLoad
1st viewWillAppear
1st viewDidAppear
1st viewWillDisappear
1st viewDidDisappear
1st viewWillAppear
1st viewDidAppear
두 번째 View Controller
2nd viewDidLoad
2nd viewWillAppear
2nd viewDidAppear
2nd viewWillDisappear
2nd viewDidDisappear
순환은 대체로 위 이미지에서 viewDidLoad와 viewDidDisappear 순서로 반복됩니다. 잘 살펴보면 반드시 그렇지는 않습니다. 첫 번째 View Controller의 viewDidLoad는 처음 한 번만 등장합니다. 패턴을 더 확실하게 보고싶기도 하고, 두 번째 View Controller의 viewDidLoad의 호출을 보고 싶어서 직접 다시 해봤습니다. 첫 번째 View Controller에서 두 번째 View Controller로 이동했다가 다시 돌아오고 한 번 더 반복함으로써 확인했습니다. 아래 결과가 나왔습니다.
1st viewDidLoad()
1st viewWillAppear()
1st viewDidAppear()
2nd viewDidLoad()
1st viewWillDisappear()
2nd viewWillAppear()
1st viewDidDisappear()
2nd viewDidAppear()
2nd viewWillDisappear()
1st viewWillAppear()
2nd viewDidDisappear()
1st viewDidAppear()
2nd viewDidLoad()
1st viewWillDisappear()
2nd viewWillAppear()
1st viewDidDisappear()
2nd viewDidAppear()
2nd viewWillDisappear()
1st viewWillAppear()
2nd viewDidDisappear()
1st viewDidAppear()
다시 한 번 첫 번째와 두 번째로 나눠보겠습니다.
첫 번째 View Controller
1st viewDidLoad()
1st viewWillAppear()
1st viewDidAppear()
1st viewWillDisappear()
1st viewDidDisappear()
1st viewWillAppear()
1st viewDidAppear()
1st viewWillDisappear()
1st viewDidDisappear()
1st viewWillAppear()
1st viewDidAppear()
두 번째 View Controller
2nd viewDidLoad()
2nd viewWillAppear()
2nd viewDidAppear()
2nd viewWillDisappear()
2nd viewDidDisappear()
2nd viewDidLoad()
2nd viewWillAppear()
2nd viewDidAppear()
2nd viewWillDisappear()
2nd viewDidDisappear()
첫 번째 View Controller만 viewDidLoad가 한 번만 출력되고, 두 번째 View Controller는 두 번째 View Controller로 이동할 때마다 viewDidLoad가 호출됩니다. Navigation Bar를 이해해야 알 수 있습니다. Stack 구조이며, 두 번째 View Controller가 사라질 때 메모리에서 아예 사라지기 때문에 두 번째 View Controller에 다시 이동할 때는 메모리에 다시 올려지면서 viewDidLoad가 호출됩니다. push와 pop을 떠올리면 이해하기 쉬울 것입니다. Life Cycle에 대한 이해가 있어야 인스턴스 생성 및 제거로 메모리 낭비를 하지 않도록 구현할 수 있습니다.