iOS에서 앱은 간단하게 3가지 실행 모드와 5 가지의 상태로 구분이 가능하며 항상 하나의 상태를 가지고 있다.
Not Running
실행되지 않는 모드와 상태 모두 의미
Foreground
Background
Not Running >> Active
- 앱을 터치해서 실행이 되는 상태
Active >> Inactive << Running
- 앱을 활성화 상태에서 비활성화 상태로 만든 뒤, 백그라운드에서도 계속 실행중인 상태
Active >> Inactive >> Suspend
- 앱을 활성화 상태에서 비활성화 상태로 만든 뒤, 백그라운드에서도 정지되어 있는 상태
Running >> Active
- 백그라운드에서 실행중인 앱을 다시 포어그라운드에서 활성화되는 상태
앱은 하나 이상의 뷰로 구성되어 있으며, 각각의 뷰들은 라이프 사이클을 가지고 있다. 따라서 뷰의 라이프 사이클을 고려해서 로직을 넣고 구성해야 한다.
ViewDidLoad
뷰 컨트롤러 클래스가 생성될 때, 가장 먼저 실행
특별한 경우가 아니라면 딱 한 번 실행되어 초기화할 때 사용
ViewWillAppear
뷰가 생성되기 직전에 항상 실행이 되기 때문에 뷰가 나타나기 전에 실행해야 하는 작업을 구현
ViewDidAppear
뷰가 생성되고 난 뒤에 실행
데이터를 받아서 화면에 나타내거나 애니메이션 등의 작업을 하는 로직 위치
ViewWillAppear에 로직을 넣었다가 뷰에 반영이 안되는 경우가 있기 때문
ViewWillDisappear
뷰가 사라지기 직전에 실행
ViewDidDisappear
뷰가 사라지고 난 뒤에 실행
Delegate
Block
Delegate와 Block은 이벤트에 대해 하나의 리스너가 있을 때 사용하는 것이 좋으며 재사용하는 경우에는 클래스 기반의 delegate를 사용하는 것이 좋다.
Notification
UI가 특정 이벤트 기반으로 정보를 표시하는 방법을 notification으로 브로드캐스팅하여 변경하거나 문서 창을 닫을 때 문서의 객체가 상태를 저장하는 지 확인하는 방법으로 notification을 사용할 수 있다.
Swift는 ARC로 메모리 관리를 한다.
ARC
강한 순환 참조
강한 순환 참조 해결법
assign
weak
Frame
부모 뷰의 상태적인 위치(x, y) 및 크기(너비, 높이)로 표현되는 사각형
Bounds
자체 좌표계 (0,0)을 기준으로 위치 (x, y) 및 크기(너비, 높이)로 표현되는 사각형
Dynamic Binding
동적 바인딩은 컴파일 타임이 아닌 런타임에 메시지 메소드 연결을 이동시킨다.
그래서 이 기능을 사용하면 응답하지 않을 수 있는 객체로 메시지를 보낼 수 있다.
개발에 유연성을 주지만 런타임에는 충동을 발생시킬 수 있다.
데이터 저장 방법
_ 와 . 연산자로 접근하는 것의 차이점
_ 는 인스턴스 변수에 직접 접근하는 연산자
. 는 getter 메소드 호출을 간단하게 표현한 것