iOS程序启动过程(生命周期)

程序启动的过程总结

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]))
  • principalClassNamenil,默认是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
  • 显示窗口
mian.storyboard的加载过程.png
  • 内部实现原理(由系统自动完成):
main.storyboard内部实现原理.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容