UIWindow

本文深入解析了iOS中的UIWindow对象,阐述了其在展示app可视内容、事件分发及处理屏幕旋转方面的重要作用。同时,文章详细说明了在有无storyboard情况下window的创建流程,以及直接将视图添加到window上的潜在问题。
摘要由CSDN通过智能技术生成

Window的作用

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

知识点

1.存放所有view的地方

2.UIWindow、ViewController层次逻辑图

291840-20160722222737122-176389012.jpg

3.四大对象关系图

291840-20160722222737341-1408070260.jpg

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显示出来,即看到了运行后显示的界面。

291840-20160722222737607-1377792383.jpg

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

转载于:https://www.cnblogs.com/limaofuyuanzhang/p/5697445.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值