[iOS] UIKit, Scene-based Life Cycle, UIViewController

CastleSilver·2023년 1월 29일
0

iOS 공부

목록 보기
1/13

UIKit이란?

  • iOS, iPadOS 또는 tvOS 앱을 위한 그래픽 이벤트 기반 사용자 인터페이스를 구성하고 관리
  • UI 구현을 위한 창 및 보기 아키텍처, Multi-Touch 및 기타 유형의 입력을 앱에 전달하기 위한 이벤트 처리 인프라, 사용자, 시스템 및 앱 간의 상호 작용을 관리하기 위한 기본 실행 루프를 제공
  • 애니메이션, 문서, 그리기 및 인쇄, 텍스트 관리 및 표시, 검색, 앱 확장, 리소스 관리 및 현재 장치에 대한 정보 가져오기에 대한 지원도 포함되어 있음
  • SwiftUI 프레임워크와 원활하게 작동하므로 SwiftUI에서 UIKit 앱의 일부를 구현하거나 두 프레임워크 간에 인터페이스 요소를 혼합할 수 있음

UIKit을 이용한 앱 개발

항상 Apple의 통합 개발 환경인 Xcode에서 프로젝트를 생성하여 iOS 또는 tvOS 앱 개발을 시작할 수 있다. 
App Store에서 다운 가능.

기본 구조

  • Xcode 앱 템플릿을 이용해 만든 앱 구조
  • 리소스에는 코드를 지원하는 이미지 자산, 스토리보드 파일, 문자열 파일 및 앱 메타데이터가 포함됨

필수 자원

모든 UIKit 앱에는 앱 아이콘시작 화면 스토리보드가 포함되어야 한다.

  • iOS 앱용 아이콘 제공
  • LaunchScreen.storyboard 파일에는 앱의 초기 사용자 인터페이스가 포함되어 있는데 이는 시작 화면(Splash screen) 또는 실제 인터페이스의 단순화된 버전일 수 있음
  • 사용자가 앱 아이콘을 탭하면 시스템이 즉시 시작 화면을 표시하여 사용자에게 앱이 시작되고 있음을 알림
  • 시작 화면은 앱이 자체적으로 초기화되는 동안 앱을 보호
  • 앱이 준비되면 시스템은 시작 화면을 숨기고 앱의 실제 인터페이스를 표시

필수 앱 메타데이터

  • 시스템은 앱 번들의 Info.plist 파일 에서 앱의 구성 및 기능에 대한 정보를 가져옴
  • 앱이 특정 하드웨어에 의존하거나 특정 시스템 프레임워크를 사용하는 경우 해당 기능과 관련된 정보를 이 파일에 추가해야 할 수 있음
  • 앱의 하드웨어 및 소프트웨어 요구 사항 선언

UIKit 앱의 코드 구조

  • UIKit 앱의 구조는 MVC(Model-View-Controller) 디자인 패턴을 기반으로 하며 객체는 목적에 따라 구분됨
  • Model : 앱의 데이터와 비즈니스 로직을 관리
  • View : 데이터의 시각적 표현을 제공
  • Controller : 모델과 뷰 객체 사이의 중간다리 역할을 하여 적절한 시간에 데이터를 이동

생명 주기 관리

  • 앱이 포그라운드 또는 백그라운드에 있을 때 시스템 알림에 응답하고 기타 중요한 시스템 관련 이벤트를 처리
  • Foreground 상태인 앱은 화면을 점유하고 있기 때문에 시스템 리소스보다 높은 우선순위를 가지고 있음
  • Background 상태인 앱은 최소한의 작업을 수행해야 함
  • iOS 13 이상 : UISceneDelegate 개체를 사용하여 장면 기반 앱의 수명 주기 이벤트에 응답
  • iOS 12 이하 : UIApplicationDelegate 개체를 사용하여 수명 주기 이벤트에 응답

scene-based 생명 주기 관리

  • 앱이 장면을 지원하는 경우 UIKit은 각 장면에 대해 별도의 수명 주기 이벤트를 제공함.
  • 사용자는 각 앱에 대해 여러 장면을 만들고 개별적으로 표시하거나 숨길 수 있음. 각 + 장면에는 고유한 수명 주기가 있으므로 각 장면은 서로 다른 실행 상태에 있을 수 있다. 즉 한 장면은 Foreground 상태고 다른 장면은 Background 상태거나 Suspended 되어 있을 수 있음
  • UIKit이 Scene 앱에 연결할 때 Scene의 초기 UI를 구성하고 Scene에 필요한 데이터를 로드
  • foreground-active 상태로 전환할 때 UI를 구성하고 사용자와 상호 작용할 준비를 함
  • foreground-active 상태에서 벗어나면 데이터를 저장하고 앱의 동작을 조용하게 함.
  • background 상태로 진입하면 중요한 작업을 완료하고 가능한 많은 메모리를 확보한 후 앱 스냅샷을 준비
  • Scene과 연결 해제되면 Scene과 관련된 모든 공유 리소스를 정리

UIViewController

@MainActor class UIViewController : UIResponder

@MainActor

mian thread 에서의 동작을 보장하는 Actor.

역할

  • 뷰 계층을 관리하는 데 필요한 메서드와 속성을 하위 클래스로 만들고 추가
  • 기본 데이터의 변경에 대한 응답으로 뷰의 내용 업데이트
  • 뷰와 사용자의 상호 작용에 응답
  • 뷰 크기 조정 및 전체 인터페이스 레이아웃 관리
  • 앱에서 다른 뷰 컨트롤러를 포함한 다른 개체와 조정
  • view controller가 단독적으로 사용되는 일은 거의 없고 대부분의 경우 유저 인터페이스의 일부를 담당하는 여러개의 view controller가 같이 사용됨

뷰 관리

  • 각 view controller는 view 계층 구조를 관리하며 루트 뷰는 이 클래스의 view 프로퍼티에 저장됨
  • 루트 뷰는 주로 나머지 view 계층 구조의 컨테이너 역할을 함. 루트 뷰의 크기와 위치는 해당 view를 소유한 객체(상위 view controller 또는 앱의 window)에 의해 결정됨
  • view controller는 소유한 view를 곧바로 로드하지 않음. view는 해당 프로퍼에 처음 액세스할때 로드 또는 생성됨

뷰 관련 Notification 처리

  • View가 나타나거나 사라지면 컨트롤러는 자동적으로 자체 메서드를 호출하여 하위 클래스가 변동사항에 응답할 수 있도록 함
  • view에서 가능한 visibility 상태와 상태 전환

뷰 회전 처리

  • 회전은 view controller의 view 크기가 변경되는 이벤트로 간주되며viewWillTransition(to:with:) 메서드를 통해 보고됨
  • 인터페이스 방향이 변경 > UIKit이 윈도우의 루트 view controller에서 viewWillTransition(to:with:) 메서드를 호출 > 루트 view controller는 하위 view controller에 알리고 view controller 계층 전체에 메시지를 전파
profile
우당탕탕 비전공자 개발자

0개의 댓글