iOS程序启动过程(生命周期)
2015-08-25 本文已影响315人
YotrolZ
程序启动的过程总结
1.main函数
2.UIApplicationMain
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
- 此函数会根据
principalClassName
创建UIApplication
对象 - 此函数会根据
delegateClassName
创建一个delegate
对象 - 并将该
delegate
对象赋值给UIApplication
对象中的delegate
属性
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]))
-
principalClassName
传nil
,默认是UIApplication
,创建一个UIApplication对象
-
delegateClassName
不能传nil
,这里传nil
,意味着application
没有代理
,就无法监听系统的事件,系统的事件都没法监听,窗口都不知道什么时候去加载,因为视图都是懒加载的,因此就不会创建窗口,什么东西都没有。 -
argc
,argv
: ISO C标准main函数的参数,直接传递给UIApplicationMain
进行相关处理即可
3.delegate对象开始监听(处理)系统事件(没有storyboard),手动执行
- 程序启动完毕的时候,就会调用代理的
application:didFinishLaunchingWithOptions:
方法 - 在
application:didFinishLaunchingWithOptions:
中创建UIWindow - 创建和设置UIWindow的rootViewController
- 显示窗口
4.delegate对象开始监听(处理)系统事件(有storyboard),系统自动执行
- 根据
info.plist
文件获得最主要的storyboard的文件名,加载最主要的storyboard - 创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口
- 内部实现原理(
由系统自动完成
):