반응형
ி 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
반응형
'해킹-보안 > 모바일' 카테고리의 다른 글
adb 명령어 및 앱 서명 방법 (0) | 2021.12.21 |
---|---|
Magisk 루팅 앱 설치 및 JEB로 앱 디컴파일하기 (0) | 2021.12.17 |
안드로이드 앱 개념 정리(4대 컴포넌트, Lifecycle) (0) | 2021.12.15 |
DIVA - 안전하지 않은 데이터 저장 (0) | 2020.12.09 |
루팅 탐지 우회 (0) | 2020.12.09 |