1.main函数
* 程序启动后 首先执行main函数,
* main 函数中 执行 UIApplicationMain函数;
2.UIApplicationMain
* int UIApplicationMain(int argc , char *argv[] , NSString *principalClassName , NSString * delegateClassName );
* argc ,argv : 直接传递给UIApplicationMain 进行相关处理;
* principalClassName: 指定应用程序类名 , 该类必须是 UIApplication (或子类) , 如果为 nil ,则用UIApplication 类 作为默认值
* delegateClassName : 指定应用程序的代理类, 该类必须遵守 UIApplicationDelegate 协议.
* 根据principalClassName 参数 创建UIApplication对象
* 根据 delegateClassName 参数 创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统事件(没有storyboard)
*程序启动完毕的时候,就会调用代理的application:didFinishLaunchingWithOptions:方法
*在application:didFinishLaunchingWithOptions:中创建UIWindow
* UIWindow 继承子UIView
* iOS 程序启动后创建的 第一个可视控件就是UIWindow,一个程序之所以能显示在屏幕上 是因为 它有window
* 想要是 window 显示内容有 两种方法
* addSubView : (UIView *)view 直接添加 , 但是 并不理会 view对应的UIViewController;
* 把想要显示的view 的UIViewController 赋值给 UIWindow 的 rootViewController;
*创建和设置UIWindow的rootViewController
*显示窗口
* -(void)nakeKeyWindow; 让当前UIWindow 成为 主窗口;
* -(void)makeKeyAndVisible; 让当前UIWindow 成为主窗口, 并显示出来;
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
*创建UIWindow
*创建和设置UIWindow的rootViewController
*在storyboard中 箭头所指的控制器 即为 rootViewController
*显示窗口