앱 생명주기(ViewController Life Cycle)
: 앱 생명주기란 화면에 보여졌다가 사라지기까지의 과정을 말한다.
앱의 현재 상태에 따라 수행할 수 있는 작업과 수행할 수 없는 작업이 결정된다. 가령 Forground App은 사용자의 시선을 끌기 때문에 CPU 를 포함한 시스템 리소스보다 우선 순위가 높다고 볼 수 있다. 이와 반대로 Background App 은 가능한 적은 작업을 수행해야 하며 화면 밖에 있기에 아무 작업도 수행하지 않는 것이 좋다.
위의 그림을 참고하며 흐름도에 따라 가보자.
loadView()
: View 를 메모리에 올리는 과정을 말한다.
- 스토리보드로 만들어진 화면을 호출하는 것이 아닌 -> 내가 만든 코드로 이동할 것이라는 의미
- 코드로 구현했을 경우에만 재정의하면 된다.
- View 를 Load 시키거나 만들고 뷰 속성을 부여한다.
- 컨트롤러가 관리하는 View 를 "만드는" 역할을 한다.
- 이 메서드는 super 로 호출하면 절대 안 된다.
- View 를 추가로 초기화하려면 -> viewDidLoad() 메서드에서 초기화해야 한다.
override func loadView() {
view = LoginView() // 뷰를 교체하는 시점
//super.loadView() // 재정의해서, 구현할때 상위호출 필요하지 않음(하면 안됨)
}
viewDidLoad()
: 앱의 화면에 들어오면 가장 먼저 실행시키는 함수 (시스템에 의해 자동 호출됨)
- > 스토리 보드 상의 View 들과의 연결이 끝난 시점을 말한다.
- 화면이 처음 만들어질 때 "한 번만" 실행된다.
- ViewController 가 View 하이어아키를 메모리에 로드한 후 호출된다.
- View 계층이 nib 파일에서 로드되었는지 loadView() 메서드에서 프로그래밍 방식으로 생성되었는지 여부에 관계없이 호출된다.
- 일반적으로 nib 파일에서 로드된 뷰에 대해 추가 초기화를 수행하려면 이 방법을 재정의한다.
- 인터넷에서 데이터를 가져오는 역할을 수행한다.
override func viewDidLoad() {
super.viewDidLoad()
}
viewWillAppear()
: 뷰가 화면에 나타날 때마다 계속 호출된다.
- 뷰가 화면에 나올 때 마다 “계속 호출” 된다.
- View 가 View hierarchy 에 추가되며 화면에 보이기 직전에 계속 호출된다.
- 다른 뷰에서 갔다가 다시 돌아오는 상황에, 어떤 작업을 처리하고 싶을 경우 사용함
- View와 관련된 추가적인 초기화 작업을 수행한다.
// If true, the view is being added to the window using an animation.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
viewDidAppear()
: 스크린에 뷰가 나타난 직후에 호출된다.
- 뷰 컨트롤러의 뷰가 View 계층에 추가가 완전히 된 후 호출된다.
- 뷰의 초기 모양과 관련된 애니메이션을 완료한 후 호출된다.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
viewWillDisAppear()
: 스크린 뷰가 사라지기 전에 호출
→ 사실 메모리에서 없어진 것은 아니다.
// 뷰가 사라지기 전
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
viewDidDisAppear()
: 스크린 뷰가 사라진 후에 호출
→ ViewController 가 View 가 제거되었다고 알려준다.
// 뷰가 사라지기 전
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
}
deinit
: 메모리에서 내려간다.
deinit { }
ViewController 간의 데이터 전달
(1) 직접 전달 방식(동기 방식) : 데이터를 직접 넘겨주는 방식
- present, push 시 Property 에 접근후 넘겨주는 방식
- Segue prepare 메서드를 활용하여 데이터를 넘겨주는 방식
- Protocol / Delegation 을 활용하여 데이터를 넘겨받는 방식
- Closure 를 활용해서 데이터를 넘겨받는 방식
- NotificationCenter 를 활용해서 데이터를 넘겨받는 방식
(2) 간접 전달 방식(비동기 방식) : 데이터를 다른 곳에 저장한 후, 필요 시 가져다 쓰는 방식
- AppDelegate 활용
- UserDefaults 사용하기
- CoreData OR Realm 활용하기
'App Dev' 카테고리의 다른 글
[iOS] MVC/MVVM 패턴 (0) | 2022.12.07 |
---|---|
[IOS] CRUD in swift _ CoreData (0) | 2022.12.02 |
[iOS] 동기 및 비동기 (0) | 2022.11.28 |