본문 바로가기

해킹-보안/모바일

IOS 앱 개념 정리 (기본 인터페이스 및 Lifecycle)

반응형

ி UIKit 기본 인터페이스

 

UIKit

 
  • UI를 구현하고 이벤트를 관리하는 IOS의 핵심 프레임워크
  • 사용자 이벤트 처리를 위한 클래스 포함(텍스트/이미지 처리, 애니메이션 처리, 제스처 처리 등)
  • 앱 화면을 구성하는 요소 포함(버튼, 테이블뷰, 슬라이더, 텍스트 필드, 경고창 등)
  • UIResponder에서 파생된 클래스나 UI 관련 클래스는 메인 스레드(혹은 메인 디스패치 큐)에서만 사용할 것

UIApplication

 
  • 모든 iOS 앱은 UIApplicationMain 함수를 실행
  • UIKit는 UIApplicationMain 함수를 실행하여 생성된 UIApplication 객체를 통해 앱 실행에 접근 가능
  • 모든 iOS 앱은 단 하나의 UIApplication 인스턴스를 보유
  • UIApplication 객체는 singleton 형태로 생성되어, UIApplication.shared 형태로 앱 전역에서 사용 가능,
    해당 객체는 사용자 이벤트에 반응하여 앱의 사용자 초기 라우팅을 처리
라우팅: 전달받은 사용자 이벤트를 어떤 오브젝트에 전달할지 결정하는 작업


RunLoop

 
  • 유저가 이벤트를 일으키고 그 이벤트들을 처리하는 프로세스
  • 런루프는 스레드에 작업이 있으면 시작하고 없으면 중단
  • 메인 런루프는 뷰와 관련돼있으며 메인 스레드에서 동작
  • UIApplication 객체가 웹 실행 시 메인 런루프를 실행하여 뷰의 이벤트 및 업데이트를 처리
  • RunLoop의 작동 원리( 총 2가지 Event Source 수신 )
Input Source
다른 Thread나 Application으로부터 온 비동기 이벤트 전달

Timer
예약된 시간 또는 반복 간격으로 발생하는 동기 이벤트 전달
 

 

 


ி IOS 생명 주기

 

앱 상태

 
  • 앱의 사용 과정 중 나타나는 상태 값을 의미하며 5개의 상태가 존재
Non-running: 아무것도 실행하지 않은 상태
Inactive: 앱이 Foreground에서 실행 중이지만 이벤트는 받지 못하는 상태
Active: 앱이 실행 중이며 이벤트를 받을 수 있는 상태
Background: 앱 사용중에 다른 앱을 실행하거나 홈 화면으로 나갔을 때 상태
Suspended: background 상태에서 추가적인 작업을 하지 않으면 곧바로 suspended 상태로 진입

  • iOS 앱의 주요 작업은 Active, Background 상태에서 주로 이뤄짐
  • Background 상태에서 앱 실행 시 InActive 상태를 거치지 않고 앱이 실행됨
  • 앱이 Suspended -> Not Running 상태로 진입 시 알림 수신 불가
  • Background -> Suspended 상태로 진입 시 willTerminate 메소드가 실행되지만 기기 재부팅 시 실행 불가
  • 메모리가 부족하면 iOS는 suspended 상태의 앱을 메모리에서 해제하여 메모리 확보

UIApplicationDelegate method

 
  • life-cycle을 관리하는 역할
  • 앱 상태 변경 시 UIKit는 적절한 delegate 객체 method를 호출
  • iOS 12 이전 버전에서는 UIApplicationDelegate를 사용
  • method 종류 7가지

초기 UI 구성 / 필요한 데이터 로드
1-1 application(_:willFinishLaunchingWithOptions:)
프로그램을 초기화하고 실행할 준비(InActive 상태)

1-2 application(_:didFinishLaunchingWithOptions:)
앱의 초기화를 완료하고 모든 최종 변경을 수행(Active(foreground) 혹은 Background 상태)

life-cycle 이벤트 응답 메서드
applicationWillEnterForeground(_:)
Background 에서 Foreground로 진입할 것임을 delegate에게 전달하여 Background 상태던 앱이 InActive 상태로 전환

applicationDidBecomeActive(_:)
InActive에서 Active 상태로 이동했음을 전달(작업 재개)

applicationWillResignActive(_:)
Active상태에서 InActive 상태로 진입할 것임을 전달(작업 중지)

applicationDidEnterBackground(_:)
Background 상태에 있음을 전달

applicationWillTerminate(_:)
앱 종료 시기를 delegate에게 전달(작업 종료)

§ app delegate는 AppDelegate와 다르며 app delegate는 AppDelegate 클래스의 객체임

 

▷ 참고

1. UIKit 기본 인터페이스
https://developer.apple.com/documentation/uikit
https://developer.apple.com/documentation/uikit/uiapplication
https://developer.apple.com/documentation/uikit/UIWindow
https://developer.apple.com/documentation/uikit/uiapplicationdelegate
https://developer.apple.com/documentation/uikit/view_controllers

2. iOS lifecycle
https://developer.apple.com/documentation/uikit/uiviewcontroller

 
반응형