-
启动原理:
- 程序一启动,就会加载
load 方法
,把所有东西,加载到"内存"
然后,加载main 方法
。 - 执行
main 函数
--> 执行UIApplicationMain 函数
--> 初始化UIApplication
- 开启事件循环
- 程序一启动,就会加载
- 分析
main.m
int 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 方法
- 创建