일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문법
- 개발
- OOP
- 함수형패러다임
- 아이폰프로그래밍
- POP
- 함수형프로그래밍
- iOS프로그래밍
- 디자인패턴
- IOS
- 고차함수
- Solid
- 개발자
- 부스트코스
- 의존성
- fp
- Swfit
- 네이밍
- 클린소프트웨어
- DesignPattern
- 클린코드
- 협업
- 객체지향프로그래밍
- 이름
- CleanCode
- 의도
- SWIFT
- interface
- protocol
- 인터페이스
- Today
- Total
밤에 쓴 코드
iOS) ViewController의 특징과 생명주기 본문
ViewController의 특징과 생명주기
Responsibility (뷰컨트롤러의 책임)
주요한 데이터의 변화에 응답으로 뷰들의 컨텐트들을 업데이트 한다.
뷰들과 함께 사용자와의 대화에 응답한다. - 이벤트 핸들링
뷰들의 사이즈 재조정과 전반적인 인터페이스의 레이아웃을 관리한다.
다른 객체(뷰컨트롤러 등)들과 함께 앱을 구성한다.
ViewController Type
뷰컨트롤러는 두가지 타입이 존재한다.
일반적으로 흔히 보는 인터페이스 빌더로 생성시 기본으로 생성되는 ViewController는 Content View Controller에 해당한다.
NavigationViewController / TabBarViewController 처럼 여러 개의 View Controller를 제어하는 뷰 컨트롤러도 존재하는 데 이들이 ContainerViewController 타입이다
- Content view controller
- 앱의 컨텐트의 일부분을 관리하는 뷰 컨트롤러
- 자신의 모든 뷰들을 스스로 관리한다.
- Container view controller
- 다른 뷰 컨트롤러들로 부터 정보를 모은다.
- 자신의 뷰들과 자신의 자식 뷰 컨트롤러들의 root view들을 관리한다.
- 직접 자식 뷰 컨트롤러릐 컨텐츠를 관리하지는 않고 root view의 크기조절과 위치조절에 대해서만 관리한다.
Life Cycle Method
뷰 컨트롤러에는 생명주기가 존재한다.
뷰 컨트롤러간에는 전환이 존재한다.
전환은 되지만 이전 뷰 컨트롤러의 뷰가 유지되는 경우도 있고, 아닌 경우도 존재한다.
또 전환될 뷰 컨트롤러에서 이전 뷰 컨트롤러의 정보를 이어받아서 작업을 해야하는 경우도 빈번하다.
이를 위해 그 해당시점을 이벤트화 해두어서 그 시점에서 해야할 동작을 지정해둘 수있다.
viewDidLoad()
- 뷰컨트롤러의
var view: UIView!
프로퍼티는 지연로딩된다. view가 필요로 될 때 view가 nil이면loadView()
메소드를 호출하여 view를 로드한다. loadView()
직 후 에 호출되는 콜백메소드이다.
- 뷰컨트롤러의
viewWillAppear()
- 뷰컨트롤러의 root view 가 로드된 이후에 window 의 뷰 계층으로 더해지기 직 전 호출되는 메소드이다.
viewDidAppear()
- window 의 root view가 뷰 계층으로 더해진 직 후 호출되는 메소드이다.
viewWillDisAppear()
- window 의 root view가 뷰 계층에서 제거되기 직 전 호출되는 메소드이다.
viewDidDisAppear()
- window 의 root view가 뷰 계층에서 제거된 직 후 호출되는 메소드이다.
Tip
뷰 컨트롤러는 데이터 객체와 뷰 사이의 중개자이다.
뷰 컨트롤러와 모델(데이터 오브젝트)의 책임을 깔끔하게 분리하는 걸 유지 해야한다.
뷰 컨트롤러는 Responder객체이고 Responder Chain 에 연결된다. 따라서 view controller 도 이벤트 헨들링을 할 수있다.
View Life Cycle
Present - CurrentContext / FullScreen 은 presentingViewController 의 rootView를 뷰계층에서 제거한다
Present - OverCurrentContext / OverFullScreen 은 presentingViewController 의 rootView를 뷰계층에서 제거하지 않는다
Present - CurrentContext, fullScreen
Present : beforeViewController -> afterViewController
- afterViewController.viewDidload() - beforeViewController.viewWillDisAppear() - afterViewController.viewWillAppear() - afterViewController.viewDidAppear() - beforeViewController.viewDisappear()
Dissmiss : afterViewController -> beforeViewController
- afterViewController.viewWillDisappear() - beforeViewController.viewWillAppear() - beforeViewController.viewWillAppear() - afterViewController.viewDisDisappear()
뷰 계층에서 사라질 뷰
WillDisappear()
뷰 계층에 추가될 뷰
WillAppear()
뷰 계층에 추가된 뷰
DidAppear()
*뷰 계층에서 사라질 뷰 *
DidDisappear()
의 순서를 거치며 view가 전환된다.
CurrentContext / FullScreen 은 기존 presentingViewController 의 rootView가 뷰의 계층(window의 subView)에서 제거 된다.
따라서 최상단에 뜰 뷰 이전의 뷰가 disAppear()되는 생명주기 메소드가 호출된다.
Present - OverCurrentContext, OverFullScreen
Present : beforeViewController -> afterViewController
- afterViewController.viewDidload() - afterViewController.viewWillAppear() - afterViewController.viewDidAppear()
Dissmiss : afterViewController -> beforeViewController
- afterViewController.viewWillDisappear() - afterViewController.viewDisDisappear()
뷰 계층에 추가될 뷰
WillAppear()
뷰 계층에 추가될 뷰
DidAppear()
*뷰 계층에서 사라질 뷰 *
DidDisappear()
의 순서를 거치며 view가 전환된다.
OverCurrentContext / OverFullScreen 은 기존 presentingViewController 의 rootView가 뷰의 계층(window의 subView)에서 제거되지 않는다.
Present 시 disappear
되지 않으며, dismiss시 다시 appear
도 다시 호출되지 않는다
Show (Push)
- NavigationViewController 에서의 Life Cycle 호출 순서
Push : beforeView -> afterView
- afterViewController.viewDidload() - beforeViewController.viewWillDisappear() - afterViewController.viewWillAppear() - beforeViewController.viewDidDisappear() - afterViewController.viewDidAppear()
Pop : afterView -> beforeView
- afterView.ControllerviewWillDisappear() - beforeViewController.viewWillAppear() - afterViewController.viewDisDisappear() - beforeViewController.viewDidAppear()
네비게이션뷰컨트롤러는 두 개의 뷰 컨트롤러가 라이프 사이클 메소드를 주고 받듯 순서를 거치며 view가 전환된다.
'iOS' 카테고리의 다른 글
URLSession Tutorial: Getting Started 번역본 (1) | 2019.10.20 |
---|---|
iOS) IBOutlet / IBAction (0) | 2019.07.23 |
iOS) Segue (0) | 2019.07.23 |
iOS) UITabBarController, UITabBar (0) | 2019.07.13 |