ios - 程序启动过程之UIWindow简单介绍
•UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow
•iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
•一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow
UIWindow的创建过程:
创建一个空的项目,就可以看到UIWindow是怎么出来的了。在程序启动完毕之后就会调用一次,创建过程如下:
#import "DHAppDelegate.h" #import "DHViewController.h" @interface DHAppDelegate () @end @implementation DHAppDelegate /** * 程序启动完毕就会调用一次 */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1.创建window self.window=[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 2.设置window的背景色 self.window.backgroundColor=[UIColor whiteColor]; DHViewController *oneVC=[[DHViewController alloc]init]; //方法1.控制器是一个局部变量,出了方法控制器就会不存在了,但是控制器的view还在,此时有可能会报错(野指针)。 //当view发生一些事件的时候,通知控制器,但是控制器已经销毁了,所以可能出现未知的错误 // [self.window addSubview:oneVC.view]; //方法2. 设置UIWindow的根控制器 self.window.rootViewController=oneVC; //3.让window成为keyWindow(主窗口),且可见 [self.window makeKeyAndVisible]; return YES; } @end
总结:程序启动的完整过程
1.main函数
2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象
3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口
3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
* 创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

浙公网安备 33010602011771号