1.应用程序启动概述
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
2.启动原理
- 在main函数中执行UIApplicationMain函数,内部原理如下:
- 执行UIApplicationMain函数
- 1.根据第三个参数创建UIApplication对象
- 2.根据第四个参数创建UIApplication对象的代理对象,并赋值给UIApplication对象的代理
- 3.开启主事件循环,接受处理事件,并让程序一直运行
- 4.加载info.plist文件,判断有没有指定main.storyboard,如果指定就去加载
- UIApplicationMain函数底层解析
- 第一二个参数:是系统传入的参数,暂时可以忽略
- 第三个参数:principalClassName指定应用程序类名(app的象征),该类必须是UIApplication(或子类),若为nil,则默认传入UIApplication类名
- 第四个参数:delegateClassName指定应用程序类的代理或代理的子类的类名,该类必须遵守UIApplicationDelegate协议
- 反射机制
- 输入类名有提示,避免输入错误
- NSStringFromClass:根据一个类名生成一个类名字符串
- NSClassFromString: 根据一个类名字符串生成一个类名
3.程序启动原理图
![这里写图片描述](https://img-blog.csdn.net/20150728210556775)