-
启动原理:
- 程序一启动,就会加载
load 方法,把所有东西,加载到"内存"
然后,加载main 方法。 - 执行
main 函数--> 执行UIApplicationMain 函数--> 初始化UIApplication - 开启事件循环
- 程序一启动,就会加载
- 分析
main.mint main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } -
main.m 文件,它其实只是做了2件事情- 执行
main 函数 - 执行
UIApplicationMain-
NSStringFromClass: 把类名转换为字符串。 argc, argv, 是C语言(main 函数,传过来的参数)- 第3个参数: 要创建对象的名称。
如果为:nil,则是 @"UIApplication"。 - 第4个参数: 创建对象的代理名称。
@"AppDelegate"
-
- 执行
- 上面方法可以写成这样, 因为第3,4个参数是
NSString 类型return UIApplicationMain(argc, argv, @"UIApplication",@"AppDelegate");

-
UIApplicationMain 方法到底做了些什么呢?- 创建
UIApplication 对象,为UIApplication 对象设置代理对象AppDelegate - 开启一个事件循环
(主运行循环 == 死循环,保证应用程序不退出) - 加载
info.plist文件,根据配置文件,做相应的配置。比如:- 是否指定,启动界面的文件(
LaunchScreen), 有则显示,无则不去加载"启动界面" - 是否指定
Main storyboard文件(Main),有则加载Main.storyboard文件。
- 是否指定,启动界面的文件(
- 通知应用程序代理,应用程序启动完毕.
调用AppDelegate.m里的didFinishLaunchingWithOptions 方法
- 创建
