//应用程序的启动过程
1.main函数---->UIApplicationMain--->开启事件循环,监听事件(包括系统事件,例如前后台等,还有监听事件队列,事件队列先进先出,取出最前面的事件进行处理,因为一直有个事件循环,所以程序不会退出,也就是UIApplicationMain不会返回)
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
argc、argv:直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
/////////////////////////////////////////////////
UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)
程序正常退出时UIApplicationMain函数才返回
四大对象关系图:
应用程序启动原理图: