程序的启动过程:
main函数中执行了一个UIApplicationMain这个函数
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
intUIApplicationMain(int argc, char*argv[], NSString *principalClassName, NSString *delegateClassName)
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
delegateClassName :指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
UIApplicationMain底层的实现:
1.根据principalClassName提供的类名创建UIApplication对象
2.根据delegateClassName类名创建delegate对象,并赋值给UIApplication对象的delegate属性.
3.首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法
4.建立应用程序的MainLoop事件循环,进行事件的处理(不断遍历,不断的从事件的队列中取事件进行处理,app的每个事件都会加到队列中去)(
4.加载info.plist文件,并解析,看有没有指定main.storyboard文件如果指定就加载。
5.程序正常退出时就返回