[iOS - Swift] 공부할 것
iOS 구성 요소
1. ViewController
- 화면의 구성요소를 다루는 객체
2. AppDelegate
- 앱의 프로세스 중 일어날 이벤트를 다루는 객체
- @UIApplicationMain 어노테이션을 달아주어야 함
- 메모리가 부족한 상황, Background로 가는 상황 등의 이벤트 관리
3. StoryBoard
- 앱의 레이아웃 구성 화면과 흐름을 총 관리
4. info.plist
- 애플리케이션의 기본 정보를 가지고 있는 파일
5. Assets.scassets
- Image Set들을 정리하는 폴더 (@2x, @3x)
iOS 레이어 구조
iOS App
1. Cocoa Touch
- 화면의 UI 및 터치 등의 기능
- UIKit, MapKit, MessageUI
2. Media
- 그래픽 / 오디오 / 비디오 등의 기능
- Core Image, Core Graphics
3. Core Services
- 내부 데이터 / 위치 / 센서 등의 기능
- Foundation, Core Location 등
4. Core OS
- iOS 대부분의 기능적인 부분 관리
H/W
* 싱글톤 패턴이란 특정용도로 객체를 하나 생성하여 공용으로 사용하고 싶을 때 사용하는 방법이다. 주로 환경설정, 로그인 정보 등을 특정용도로 생성해둔 객체에 넣어두고 여러 객체에서 접근 가능하도록 하여 데이터를 사용하는 것이다. 이 객체는 임의로 메모리에서 해제해주지 않는 이상 프로그램이 실행되고 끝날 때 까지 메모리에 유지된다.
앱 실행 프로세스
앱 실행 - UIApplication 객체 생성 - @UIApplicationMain AppDelegate 객체 생성 - 메인이벤트 루프 실행
1. UIApplication 객체
- 싱글톤 패턴으로 앱에 하나만 존재
- 앱의 프로세스에 관련한 이벤트를 감지하여 AppDelegate 객체에 전달
2. AppDelegate 객체
- @UIApplicationMain을 작성한 클래스의 객체
- UIApplication 객체로부터 위임받은 일부 권한을 이용하여 커스텀 코드와 상호작용하는 역할 담당
- AppDelegate 역할을 할 클래스에 @UIApplicationMain 어노테이션을 걸어서 표시하는 방식으로 시스템에 델리게이트 정보 전달
- Swift를 사용할 땐, @UIApplicationMain 어노테이션을 찾아 해당하는 클래스를 실행한다.
Obj C 기준
1. main() 함수가 실행된다.
2. main() 함수는 다시 UIApplication() 함수를 호출한다.
3. UIApplicationMain() 함수는 앱의 본체에 해당하는 UIApplication 객체를 생성한다.
4. UIApplication 객체는 info.plist 파일을 바탕으로 앱에 필요한 데이터와 객체를 로드한다.
5. AppDelegate 객체를 생성하고 UIApplication 객체와 연결한다.
6. 이벤트 루프를 만드는 등 실행에 필요한 준비를 진행한다.
7. 실행 완료 직전, AppDelegate의 application(_: didFinishLaunchingWithOptions) 메소드를 호출한다.
Swift 기준
- 1~5의 과정을 @UIApplicationMain 어노테이션 표기로 대체
- 나머지는 같다.
앱 실행 상태
1. Not Running
- 앱이 실행되지 않거나 종료된 상태
2. Inactive
- 앱이 전면에서 실행중이지만, 아무런 이벤트를 받지 않고 있는 상태
3. active
- 앱이 전면에서 실행중이며 이벤트를 받고 있는 상태
4. Background
- 앱이 백그라운드에 있지만 여전히 코드가 실행되고 있는 상태
파일 다운로드나 업로드, 연산처리 등 여분의 실행 시간이 필요한 앱일 경우 특정 시간 동안 이 상태로 남아있게 되는 경우도 있다.
5. Suspend
- 앱이 보이지 않고 실행되는 코드도 없는 상태
메모리에 유지는 되고 있으나 iOS 시스템은 메모리가 부족하면 Suspend 상태에 있는 앱들을 정리한다.
App Life Cycle - AppDelegate.swift
1. application(_:didFinishLaunching:)
- 앱이 처음 시작될 때 실행(초기화 할 수 있음)
2. applicationWillResignActive:
- 앱이 active에서 inactive로 이동될 때 실행
3. applicationDidEnterBackgroung:
- 앱이 background 상태일 때 실행(언제든 Suspend 상태가 될 수 있음)
4. applicationWillEnterwForeground:
- 앱이 background 에서 foreground로 이동될 때 실행(아직 foreground에서 실행 중이진 않음)
5. applicationDidBecomeActive:
- 앱이 active상태가 되어 실행 중일 때
6. applicationWillTerminate:
- 앱이 종료될 때 실행(Suspend 상태에서 종료될 때는 호출되지 않음)
ViewController Life Cycle - ViewController.swift
1. viewDidLoad
- 해당 뷰 컨트롤러 클래스가 생성될 때(viewWillAppear 전에 실행)
- 보통 단 한번만 실행되며, 주로 초기화에 사용
2. viewWillAppear
- 뷰 컨트롤러가 화면에 나타나기 직전에 실행
- 뷰 컨트롤러가 화면에 다시 나타날 때마다 실행
- 주로 다른 화면에 갔다 온 경우의 이벤트 작성에 사용
3. viewDidAppear
- 뷰 컨트롤러가 화면에 나타난 직후에 실행
- 화면 상의 애니메이션이나 서버에서 받아온 데이터를 화면에 갱신할 때 주로 사용
4. viewWillDisappear
- 뷰 컨트롤러가 화면에서 사라지기 시작할 때 실행
5. viewDidDisappear
- 현재 뷰 컨트롤러가 사라지고 새로운 뷰 컨트롤러가 화면에 나타난 직후에 실행
Framework
1. Cocoa Touch Framework
- iOS, watchOS 용 앱 제작을 위해 애플에서 제공하는 프레임워크
- Foundation Framework, UIKit Framework로 구성
2. Foundation Framework
- 기본 객체 정의, 로그 처리, 여러 자료형, 통신 관련 객체 등 주로 기능적인 면을 담당하는 프레임 워크
- NSString, NSNumber, NSURL, NSDictionary 등
- Swift 3.0부터 'NS' 접미사가 많이 사라짐
3. UIKit Framework
- 화면 구성에 관련된 내용
- UIViewController, UIView, UILabel, UIButton 등
Auto Layout
Auto Layout dynamically calculates the size and position of all the views in your view hierarchy, based on constratins placed on those views.
Constraint
- Auto Layout 구성을 위한 뷰의 제약사항
- 두 뷰 사이의 관계를 표현 혹은 단일 뷰의 넓이, 높이 등을 표현
- 제약사항을 표현하는 공식을 간략화 해보면 'y = mx + c'로 표현 가능