[TIL] UIKit

Eden·2025년 6월 12일

iOS 앱 실행과 UI 프레임워크 정리 (TIL)

@main

  • 앱의 엔트리 포인트를 지정해주는 애노테이션
  • main() 함수가 가장 먼저 실행되며, Swift에서는 @main을 사용해 앱의 시작 지점을 표시함
  • 애플리케이션 구조체나 클래스에 붙여 앱 실행 시작점을 정의할 수 있음

앱의 실행과정

  1. main() 함수 실행
  2. UIApplicationMain() 함수 호출
  3. UIApplication 객체 생성 (앱의 본체)
  4. 관련 리소스 로드 (Storyboard, Nib, Info.plist 등)
  5. AppDelegate 객체 생성 → UIApplication과 연결
  6. Main Run Loop 실행 준비
  7. 앱 실행 완료 직전 application(_:didFinishLaunchingWithOptions:) 호출
  8. SceneDelegate를 통해 초기 UI 구성

AppDelegate

  • 앱 전체의 라이프사이클과 전역 설정을 담당하는 클래스
  • UIApplication의 델리게이트 객체
  • 앱 실행 시작/종료, 푸시 알림 등록 등 시스템 이벤트를 처리

SceneDelegate

  • 화면에 무엇을 보여줄지 결정하는 UI Scene 관리 객체
  • iOS 13 이상에서 멀티 윈도우 지원을 위해 도입됨
  • 각각의 Scene은 앱 내에서 독립적인 UI 인스턴스

주요 컴포넌트

scene(UIScene)

  • 앱 UI의 각 인스턴스를 관리
  • 하나의 Scene이 여러 개의 Window나 ViewController를 가질 수 있음

WindowScene(UIWindowScene)

  • UIScene의 서브클래스
  • 하나 이상의 UIWindow를 관리
  • 직접 인스턴스를 생성할 수 없음
  • Info.plist에서 설정 필요

UISceneSession

  • 앱의 여러 Scene 중 하나의 Scene에 대한 정보를 담고 있음
  • Scene 복원 등에 사용됨

Scene의 상태 (Life Cycle)

  • Not Running: 앱이 시작되지 않음
  • Inactive: 실행 중이나 사용자 이벤트를 받지 않음
  • Active: 포그라운드에서 이벤트 수신 중
  • Background: 백그라운드에 있으며 작업 수행 가능
  • Suspended: 백그라운드에서 실행 중지, 메모리만 보유

UIViewController Life Cycle

  1. loadView: 뷰 계층을 코드로 생성할 때 호출
  2. viewDidLoad: 뷰가 메모리에 로드된 직후
  3. viewWillAppear: 뷰가 나타나기 직전
  4. viewDidAppear: 뷰가 나타난 직후
  5. viewWillDisappear: 뷰가 사라지기 직전
  6. viewDidDisappear: 뷰가 사라진 직후

UIResponder

  • UIKit의 이벤트 처리 시스템의 핵심 클래스
  • 터치, 모션, 리모콘 이벤트 등을 처리하거나 전달함
  • 대부분의 UIKit 클래스는 UIResponder를 상속받음 (UIView, UIViewController 등)

이벤트 전달 방식

  • Responder Chain을 사용하여 이벤트를 적절한 객체로 전달
  • 이벤트를 처리하거나, 다른 responder에게 전달 가능

First Responder

  • 가장 먼저 이벤트를 받는 객체
  • UIKit은 이벤트 발생 시 적절한 First Responder를 탐색함
    • 예: UIControl은 타깃-액션 메커니즘으로 이벤트 처리
    • Shake-motion 이벤트는 Responder Chain을 사용하지 않고 CoreMotion으로 전달

Hit Testing

  • UIKit은 View 기반의 Hit-testing을 통해 터치 이벤트 처리
  • 이벤트가 발생한 위치(CGPoint)를 기준으로 최하단 View 탐색
  • 해당 View가 First Responder로 지정되어 이벤트 수신
  • 비활성화(예: hidden) 되어 있으면 무시되고 상위 View 탐색
profile
iOS Dev

0개의 댓글