UIWindow

 

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
 
 
 
 
原文地址:https://www.cnblogs.com/kongweiiwei/p/4654785.html