iOSInterviewquestions를 보고 정리하기!
Core Data의 실행 취소 관리자는 변경 사항을 추적하고 개별적으로, 그룹으로 또는 한 번에 모두 롤백 할 수 있으므로 앱에 실행 취소 및 다시 실행 지원을 쉽게 추가 할 수 있습니다.
애플리케이션이 디바이스에 설치될 때, 앱스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하게 하는 설치 최적화 기술
디바이스에 대해 각각 조각 애플리케이션 번들을 생성하여, 해당 디바이스에서 가장 적합한 조각을 전달하는 기술
기계어로 번역되기 이전 단계의 중간 표현이다. 비트코드를 사용하여 업로드를 하면 애플이 애플리케이션을 재컴파일하여 앱 바이너리를 생성한다. 사용하지 않으면 모든 디바이스 경우에 따라 바이너리로 생성하여 합쳐져 fat binary 라는 것이 업로드되지만, 비트코드를 사용하면 필요 경우에 따라 재컴파일하게 되므로 최적화가 가능하다.
리소스를 필요할 때 다운받는 것을 말한다
func UIApplicationMain(_ argc: Int32,
_ argv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>,
_ principalClassName: String?,
_ delegateClassName: String?) -> Int32
값을 반환하지 않는다.
주 클래스에서 UIApplication 객체를 인스턴스화하고 UIApplicationDelgate를 인스턴스화하고 설정한다. 또한 응용프로그램의 실행 루프를 포함하여 이벤트 루프를 설정하고 이벤트 처리를 시작한다. 응용프로그램의 Info.plist 파일이 NSMainNibFile 키와 값에 유효한 nib 파일 이름을 포함하여 로드할 nib파일을 지정하는 경우 해당 nib 파일을 로드한다.
모든 iOS앱에는 하나의 UIApplication 인스턴스(또는 드물게 UIApplication의 하위 클래스)가 있다. 앱이 시작되면 시스템은 UIApplicationMain함수를 호출하여 UIApplication 객체를 만든다.
UIApplication의 주요 역할은 사용자 이벤트의 초기 라우팅을 처리하는 것이다. UIControl에 의해 전달된 작업 메시지를 적절한 대상 객체에 전달한다. UIApplication 객체는 open windows(UIWindow 객체) 목록을 유지하며 이를 통해 앱의 UIView 객체를 검색할 수 있다.
UIApplication 클래스는 UIApplicationDelegate 프로토콜을 준수하고 일부 메서드를 구현해야되는 delegate 객체를 정의한다. UIApplication 객체는 delgate 객체에게 앱 시작, 메모리 부족 경고 및 앱 종료와 같은 중요한 런타임 이벤트를 알린다.
앱은 openURL 메서드를 통해 이메일 또는 이미지 파일과 같은 리소스를 처리할 수 있다.
UIApplication 객체를 사용하여 다음과 같은 동작을 수행할 수 있다.
Swift에서는 @main 어노테이션을 통해 EntryPoint를 지정한다. @main을 사용하면 Top-Level 코드 작성을 대체할 수 있다. 기존에는 @UIApplicationMain를 사용했으나 이는 클래스에서만 사용이 가능하다.
이를 해결하기 위해 @main 속성을 사용하게 되었다.
Top-Level 코드?
Top-Level 코드는 0개 이상의 명령문, 선언 및 표현식으로 구성되며 함수, 클래스 또는 다른 무언가로 감싸지지 않은 모든 구문을 의마한다. Top-Level 코드에서 선언된 변수, 상수 및 그 외 선언은 동일 모듈의 일부인 모든 소스 파일의 코드에서 접근할 수 있다. Top-Level 코드는 Top-Level 선언과 실행 가능한 Top-Level code 두가지로 나눌 수 있다. 선언은 선언만으로 구성되어 모든 swift 소스 파일에서 허용되지만, 실행 가능할 코드는 선언 뿐만이 아닌 명령문 및 표현식이 포함되며 Entry Point로만 허용된다.
// 앱이 실행된 직후 사용자의 화면에 보여지기 직전에 호출
func application(_ application: UIAppliscation, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
// 앱 최초 실행될 때 호출되는 메소드
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
iOS 13에서는 iPad가 multi UI를 지원하며, ScenceDelegate로 이전
참고자료
- https://babbab2.tistory.com/44?category=831129
- https://fomaios.tistory.com/entry/실제-디바이스가-없을-경우-개발-환경에서-할-수-있는-것과-없는-것
- https://github.com/ios-study-boost/iOSInterviewquestions/issues/43
- https://www.notion.so/467df350a438455785ccb86e6a551070
- https://www.notion.so/bb8ebcc15a9342ff8fc0fd1555e13f14
- https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/UIApplicationMain.md
- https://green1229.tistory.com/265
- https://github.com/lunchScreen/Interview_Questions/issues/42
- https://exception-log.tistory.com/184
- https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/4
- https://yi-sang.github.io/blog/iOS-InActive