UIWindow

Window的作用

在iOS中,一个window(也就是一个UIWindow对象)主要有这样几个作用:
1.展示app的可视内容;
2.将事件分发给视图以及其他对象;
3.和app的view controller一起处理屏幕旋转。
其实在大多数情况下,第三方程序员不用做任何事情,window就能完成这些工作。所以很多时候,只有当这个app需要支持另一个外设的屏幕的时候,程序员才会对window进行操作。

知识点

1.存放所有view的地方

2.UIWindow、ViewController层次逻辑图

3.四大对象关系图

4.主窗口和次窗口:只有主窗口可以接收键盘以及非触摸类的消息事件

5.直接将视图加到window上也可以开发,但会带来一些问题。
1)视图的监听事件可能由于控制器被销毁而出现问题。
2)旋转事件的传递UIApplication->UIWindows->viewController->view,如果直接添加视图,没有VC,那么视图无法旋转。

6.windows创建过程
1)有storyboard,

  • 先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,
  • 创建代理,并且把代理设置给application,
  • 根据项目配置文件info.plist里面的storyboard的name,找到对应的storyboard
  • 接下来创建一个window
  • 之后创建它的初始化控制器(就是箭头所指向的控制器),自动把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。

2)无storyboard,

  • 先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,
  • 创建代理,并且把代理设置给application,
  • 开启一个事件循环,当程序加载完毕,他会调用代理的didFinishLaunchingWithOptions:方法。
  • 在该方法中,会创建一个Window,然后创建一个控制器,并把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。

6.创建代码

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = [[UIViewController alloc] init];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

声明

此博文整理自网络,部分内容可能直接摘抄原文内容,本人作为学习笔记使用。如若对读者有用,可自由收藏,但请不要用于任何的商业用途。

如果您的作品被摘抄并且不愿意在此博客被公开请联系本人删除,联系邮箱limaofuyuanzhang@qq.com。

参考

iOS开发UI篇—UIWindow简单介绍
以前从来没注意过的UIWindow

posted @ 2016-07-22 22:28  狸猫副园长  阅读(265)  评论(0编辑  收藏  举报