iOS程序的启动过程-UIWindow
UIApplicationMain
main函数中执行了一个UIApplicationMain这个函数
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
argc、argv:直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)
程序正常退出时UIApplicationMain函数才返回
程序启动完整过程:
1.main函数
2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
- 创建UIWindow
- 创建和设置UIWindow的rootViewController(storyboard中箭头指向的控制器)
- 显示窗口
有storyboard:官方文档:iosX /uikit/viewController p c for ios
The Main Storyboard Initializes Your App’s User Interface
The main storyboard is defined in the app’s Information property list file. If a main storyboard is declared in this file, then when your app launches, iOS performs the following steps:
- It instantiates a window for you.
- It loads the main storyboard and instantiates its initial view controller.
- It assigns the new view controller to the window’s rootViewController property and then makes the window visible on the screen.
翻译:
-
主故事面板初始化应用程序的用户界面
主故事面板中定义的应用程序的信息属性列表文件。如果一个主要的故事是在这个info.plist文件中声明(main),然后当你的应用程序启动,iOS执行以下步骤:
1.它为你实例化一个窗口。
2.它加载(箭头所指向)主故事面板并实例化为初始视图控制器。
3.它赋予新的视图控制器窗口为RootViewController并将在屏幕上显示这个窗口内容。
一个程序之所以能显示东西是因为它有windows。
总结: 首先程序一启动就加载main.storyboard
加载完成后就开始创建windows
并且创建箭头所指向控制器并且设置为窗口根控制器并且把窗口显示出来 控制器 根控制器也跟着在屏幕上显示出来