程序启动原理
一.首先找到程序入口,执行main函数
main -> UIApplicationMain
intmain(intargc,char* argv[]) {@autoreleasepool{// 第三个参数:UIApplication类名或者子类的名称 nil == @"UIApplication"// 第四个参数:UIApplication的代理的代理名称// NSStringFromClass:把类名转化字符串// NSStringFromClass好处:1.有提示功能 2.避免输入错误returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegate class])); }}
二.UIApplicationMain底层做事情
1.创建UIApplication对象
2.创建UIApplication的代理对象,而且给UIApplication对象代理属性赋值
3.开启主运行循环,作用接收事件,让程序一直运行
4.加载info.plist,判断下有木有指定main.storyboard,如果指定就会去加载
UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
UIApplicationMain 接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法) 程序正常退出时UIApplicationMain函数才返回
图解