์ฑ์ด ์์ํ ๋ main.c ์ ์๋ UIApplicationMain ํจ์์ ์ํด์ ์์ฑ๋๋ ๊ฐ์ฒด๋ ๋ฌด์์ธ๊ฐ?
- iOS ) UIApplication-Zedd
- UIApplication-๊ณต์๋ฌธ์
- UIApplicationMain( _ : _ : _ : _ :)-๊ณต์๋ฌธ์
- ์ํ ๋ณํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ AppDelegate ๋ฉ์๋๋ค์ ์ค๋ช ํ์์ค.
- SceneDelegate์ ๋ํด ์ค๋ช ํ์์ค
- Responder Chain ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํ๊ณ , First Responder ์ญํ ์ ๋ํด ์ค๋ช ํ์์ค.
UIApplicationMain(_: _: _: _:)ํจ์๋ฅผ ํตํด UIApplication
์ฑ๊ธํด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
Obj-C์์๋ main.c ์์ UIApplicationMain(_: _: _: _:) ๋ฅผ ํธ์ถํ์ง๋ง, Swift์์๋ AppDelegate.swift์์ AppDelegateํด๋์ค ์์ ์ด๋
ธํ
์ด์
์ผ๋ก ๋ถ์ @UIApplicationMain
๋ฅผ ํตํด UIApplicationMain(_: _: _: _:) ๋ฅผ ํธ์ถํ๋ค.
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
์ดํ ์ง์ญ
@MainActor class UIApplication : UIResponder
---
@available(iOS 2.0, *)
open class UIApplication: UIResponder {
open class var shared: UIApplication {get}
}
UIApplication? : iOS์์ ๋์์ค์ธ ์ฑ๋ค์ ์ง์ค ์ ์ด ๋ฐ ์กฐ์ ์ง์ ์ ๋๋ค.
๊ทธ๋งํผ ์ค์ํ ์ญํ ์ ํ๋ค๋๊ฑฐ๊ฒ ์ฃ ?
๋ชจ๋ iOS ์ฑ์์ UIApplication์ ํ๋์ ์ธ์คํด์ค(Singleton(์ฑ๊ธํค)
)๋ง ์กด์ฌํฉ๋๋ค(์ดํ application ๊ฐ์ฒด
). ์ฑ์ด ๋์ํ ๋ ์์คํ
์ UIApplicationMain(_: _: _: _:)
์ด๋ผ๋ ํจ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด ํจ์๊ฐ ๋ฐ๋ก shared๋ก ์ ๊ทผ ๊ฐ๋ฅํ UIApplication์ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
[์ ๋ฆฌ]
์ฑ์ด ์์๋๋ฉด ์์คํ ์ด UIApplicationMain(_: _: _: _:) ๋ฅผ ํธ์ถํด์ UIApplication์ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋ ๋ค๋ฉด UIApplicationMain(_: _: _: _:)
์ด ํจ์๋ ๋ฌด์จ ์ญํ ์ ํ๊ธธ๋ ์ฑ์ด ์๋ฅผ ํตํด ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ๋ง๋๋๊ฑธ๊น์?
UIApplicationMain(_: _: _: _:)
ํจ์๋ application ๊ฐ์ฒด์ ์ฑ์ delegate๋ฅผ ๋ง๋ค๊ณ ์ด๋ฒคํธ ์ธ์ดํด์ ์ค์ ํ๋ ์ญํ ์ ํฉ๋๋ค. ์๊ธด๊ฑด ์๋์ฒ๋ผ ์๊ฒผ์ด์.
func UIApplicationMain(_ argc: Int32,
_ argv: UnsafeMutablePointer<UnsafeMutablePointer<CChar>?>,
_ principalClassName: String?,
_ delegateClassName: String?) -> Int32
argc
: argv์ ์๋ argument์ ๊ฐ์. ๋๊ฒ main๊ณผ ์ผ์นํฉ๋๋ค.argv
: argument์ ๋ณ์ ๋ชฉ๋ก. ๋๊ฒ main๊ณผ ์ผ์นํฉ๋๋ค.prinsipalClassName
: UIApplicationํด๋์ค ๋๋ ํ์ ํด๋์ค์ ์ด๋ฆ์ ๋๋ค. nil์ ์ง์ ํ๋ฉด, UIApplication์ผ๋ก ๊ฐ์ ๋ฉ๋๋ค.delegateClassName
: application delegate๊ฐ ์ธ์คํด์คํ ๋๋ ํด๋์ค ์ด๋ฆ์ ๋๋ค. prinsipalClassName์ด UIApplication์ ํ์ํด๋์ค๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ, ํ์ ํด๋์ค๋ฅผ delegate๋ก ์ง์ ํ ์ ์์ต๋๋ค. ํ์ํด๋์ค ์ธ์คํด์ค๋ ์ฑ์ delegate ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ต๋๋ค. ์ฑ์ ๊ธฐ๋ณธ nibํ์ผ์์ delegate ๊ฐ์ฒด๋ฅผ ๋ก๋ํ๋ ๊ฒฝ์ฐ, nil์ ์ง์ ํฉ๋๋ค.
๋ค์ ๋ณธ๋ก ์ผ๋ก ๋์์์ ๋ ์ง์ญํด๋ณด์๋ฉด,
๊ทธ๋์ ์ด ํจ์๋ก ๋ง๋ค์ด์ง ์ฑ์ application ๊ฐ์ฒด
๋ ๋ค์ด์ค๋ ์ฌ์ฉ์ ์ด๋ฒคํธ์ ์ด๊ธฐ ๋ผ์ฐํ
์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. ์ด๋ค์ control ๊ฐ์ฒด๋ฅผ ํตํด(UIControl class์ ์ธ์คํด์ค)์ ์ ํ ํ๊ฒ ๊ฐ์ฒด์ action ๋ฉ์์ง๋ค์ ์ ์กํฉ๋๋ค. ๋ํ, application ๊ฐ์ฒด
๋ ์ด๋ฆฐ window(UIWindow์ ๊ฐ์ฒด)์ ๋ชฉ๋ก์ ๊ด๋ฆฌํ๋๋ฐ, ์ด๋ฅผ ํตํด ์ฑ ๋ด์ UIView ๊ฐ์ฒด๋ค์ ๊ฒ์ํ ์ ์์ต๋๋ค.
UIApplication ํด๋์ค๋ UIApplicationDelegateํ๋กํ ์ฝ์ ์ค์ํ๊ณ , ์ผ๋ถ ํ๋กํ ์ฝ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผํ๋ delegate๋ฅผ ์ ์ํฉ๋๋ค. application ๊ฐ์ฒด๋ delegate์๊ฒ ์ค์ํ ๋ฐํ์ ์ด๋ฒคํธ(์: ์ฑ ์์, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๊ฒฝ๊ณ ๋ฐ ์ฑ ์ข ๋ฃ)๋ฅผ ์๋ฆฌ๊ณ , ์ ์ ํ ์๋ต ํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋๋ถ๋ถ์ ์ฑ์์๋ UIApplication์ ์์ํ ํ์๊ฐ ์์ต๋๋ค. ์์คํ ๊ณผ ์ฑ ๊ฐ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด AppDelegate๋ฅผ ํตํด ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋๋ค.
๋ง์ฝ, ์ํธ์์ฉ์ด ๋ฌด์กฐ๊ฑด ์์คํ ์ด ํ๊ธฐ ์ ์ ์ด๋ฃจ์ด์ ธ์ผํด์ ์์์ด ๋ถ๊ฐํผํ๋ค๋ฉด, ์์์ ํ๊ณ sendEvent(_:) ๊ทธ๋ฆฌ๊ณ /ํน์ sendAction(_:to:from:for:) ๋ฉ์๋๋ฅผ overrideํ์ฌ ์ฒ๋ฆฌํ๋ฉด๋ฉ๋๋ค. ์ถ์ฒ๋์ง๋ ์์ต๋๋ค.
์ด์ ์ข ํฉ์ ์ผ๋ก ์ฑ์ด ์์๋๋ ๊ทธ ์์ ์ ์ข ๋ ์์ธํ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
-
์ฑ์ด ์์๋๋ ์๊ฐ AppDelegate์ @UIApplicationMain์ ํตํด
UIApplicationMain(_: _: _: _:)
๋ฅผ ํธ์ถํด์ ์ฑ๊ธํค์ธapplication ๊ฐ์ฒด
์delegate
๋ฅผ ๋ง๋ ๋ค.์ด ๋,
UIApplicationMain(_: _: _: _:)
์ ํ๋ผ๋ฏธํฐ ์ค delegateClassName์๋ ์ด ํจ์๋ฅผ ํธ์ถํ "AppDelegate"๊ฐ ํ ๋น๋๋ค. -
๊ทธ๋ผ AppDelegate.Swift๋ AppDelegate ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ์์์ ๋ง๋ application ๊ฐ์ฒด์ ํ ๋นํ๋ค.
-
application ๊ฐ์ฒด
๊ฐ delegate ๋ฉ์๋์ธapplication:didFinishLaunchingWithOptions:
๋ฅผ ํธ์ถํ๋ค. -
UIApplicationDelegate๋ฅผ ์ฑํ์ค์ธ AppDelegate๋
application:didFinishLaunchingWithOptions:
๊ฐ ํธ์ถ๋๋ค. -
์ฑ์ด ์คํ๋๋ค.
ํจ๊ป ๋ณด๋ฉด ์ข์ ๋ต๋ณ
์ํ ๋ณํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ AppDelegate ๋ฉ์๋๋ค์ ์ค๋ช ํ์์ค.
SceneDelegate์ ๋ํด ์ค๋ช ํ์์ค