UIWindow的详细介绍
注释:iOS程序启动完毕后,创建的第一个视图控件就是UIWindow(和第一个对象区别开来)
窗口的创建过程
展现一个空项目搭建一个程序
目的:展现程序运行过程
在storyboard没有的情况下创建项目,这样创建有许多代码
这个window就是应用所在的window
在代理对象的实现类中实现协议的方法,来完整写出window的创建过程,创建/显示
正常显示
一注释,一片漆黑
添加UIView到UIWindow中两种常见方式:
设置控制器的UIView颜色是蓝色
第一种:- (void)addSubview:(UIView *)view;直接将view添加到UIWindow中,但并不会理会view对应的UIViewController
弊端:这个方法一调用完,就释放控制器,导致只剩下view,那控制器上监听的按钮是不是一点击就崩溃了
第二种:@property(nonatomic,retain) UIViewController *rootViewController;自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的生命周期
只要将控制器的设置成窗口的根控制器就会显示one控制器的view
你看也能显示,没有主动添加view到window上也能显示
控制器只是起到辅助作用,没有控制器也能显示控件到window上,但一个应用肯定有很多界面,一个window显示是不现实的
开发中只能用第二种,第一种各种弊端:野指针,控制器指针因为已经释放了;第二种不会
演示第一种和第二种的区别
加个开关
第一种内容没换过来
第二个方法就旋转过来了
旋转事件 --> UIApplication --> UIWindow —rootViewController 旋转由控制器控制
不同界面就是将不同的控制器设置成根控制器就好了,这部分总结就是window是最牛的,必须用第二种方法
05- UIWindow补充
加载storyboard的实质
窗口创建过程的代替,以前storyboard的创建方式就是自动生成创建window的代码,并将箭头所指的控制器变成跟控制器
就是代替上面的代码(storyboard对应的就是一个控制器啊),如果把主要的storyboard的删掉,就不会显示了,因为不会加
载storyboard箭头所指的控制器,也不会创建window。
下面苹果官方文档storyboard的创建过程
makeKeyAndVisible方法的实质底层语句
现在window2是主窗口
ios6下非主窗口,写不了
————
主窗口获取,一开始是window,后来是window2,所以只有一个主窗口
————————
你会发现键盘也在一个window上,以后要改键盘上的东西,要首先拿到这个window