此文学习来源为:http://study.163.com/course/introduction/1002858003.htm

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

//当框架初始化成功后

//调用此函数

//此函数用来初始化整个程序框架结构

//整个程序对ios开发工程时的入口函数

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

//创建一个UIWindow对象

//整个程序中只有一个UIWindow对象

//在程序级别上表示屏幕窗口

//UIWindow也是继承于UIview

//UIWindow是一个特殊的UIView

//UIScreen:表示屏幕硬件表示类

//mainScreen获得主屏幕设备信息

//bounds表示屏幕的宽高值

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

//创建一个视图控制器作为UIWindow的根视图控制器

self.window.rootViewController = [[UIViewController alloc] init];

//设置背景颜色

self.window.backgroundColor = [UIColor blueColor];

UIView* view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 150)];

view.backgroundColor = [UIColor orangeColor];

//背景视图

UIView* backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 240, 360)];

backView.backgroundColor = [UIColor greenColor];

//将backView作为view的父亲视图

//子视图的坐标是参照父亲视图的坐标系

//当父亲视图移动时,所有的字视图都会跟着动

[backView addSubview:view];

[self.window addSubview:backView];

//每一个view都有一个window属性

//view.window;

//使window有效并显示到屏幕上

[self.window makeKeyAndVisible];

NSLog(@"%@",view.window);

NSLog(@"%@",backView.window);

NSLog(@"%@",self.window);

return YES;

}

运行打印内容如下:

2018-03-05 15:35:04.703268+0800 UIWindow[1307:60413] <UIWindow: 0x7fd370407cd0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x6040002572e0>; layer = <UIWindowLayer: 0x604000039a20>>

2018-03-05 15:35:04.703486+0800 UIWindow[1307:60413] <UIWindow: 0x7fd370407cd0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x6040002572e0>; layer = <UIWindowLayer: 0x604000039a20>>

2018-03-05 15:35:04.703655+0800 UIWindow[1307:60413] <UIWindow: 0x7fd370407cd0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x6040002572e0>; layer = <UIWindowLayer: 0x604000039a20>>

 可见,3个window对象其实是同一个。backView.window作为view.window的父对象,self.window作为backView.window的父对象,当self.window被创建出来后,就是唯一的,整个程序中只有一个UIWindow对象,当把子视图添加到父视图上时,譬如把backView添加到self.window上,就会把self.window作为backView的window属性赋值,也就是把父视图的window属性赋给子视图的window属性赋值,以致所有的window对象都是一样的。

附上UIWindow的关系图:一般情况下,UIWindow不与UIView直接产生联系,而是通过View Controller与UIView直接产生联系。

学习总结:

  • 重点:UIWindow的基本概念
  • 难点:UIWindow和UIView的关系

源码链接地址:https://pan.baidu.com/s/1yrOLXZZeu9MiOWtMq5-EGA  密码:7t1l

IOS开发之XCode学习007:UIWindow对象的更多相关文章

  1. IOS开发之XCode学习010:定时器和视图对象

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.通过点击"启动定时器"按钮 ...

  2. IOS开发之XCode学习008:UIViewController基础

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 红色框选部分用A代替,AppDelegate类在程序框架启动时,如果在i ...

  3. IOS开发之XCode学习011:UISwitch控件

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能:  1.定义UIswitch控件,添加UIswitc ...

  4. IOS开发之XCode学习009:UIViewController使用

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 通过点击屏幕事件,调用ViewController ...

  5. IOS开发之XCode学习012:Slider和ProgressView

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能:  1.定义UISlider和UIProgressV ...

  6. IOS开发之XCode学习013:步进器和分栏控件

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能:  1.定义UIStepper和UISegmente ...

  7. IOS开发之XCode学习014:警告对话框和等待提示器

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能:  1.警告对话框和等待提示器的概念 2.警告对话框 ...

  8. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  9. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

随机推荐

  1. Golang Linux Shell编程(一)

    1.调用系统命令 exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o func Command(name stri ...

  2. angularjs中类似textarea的换行、空格处理

    背景 今天测试人员测试出来一个显示数据的页面,没有换行. 原因剖析 这个页面是从一个<textarea>的页面拿到的数据,存到数据库中后再返回来的. 1. 知道这点之后,就有了调查方向了: ...

  3. CentOS 7 安装 Nginx 反向代理 node

    安装 nginx yum install epel-release yum install nginx 配置 nginx sudo vim /etc/nginx/nginx.conf, 改成下面配置: ...

  4. 十年磨一剑 Delphi重新崛起再写传奇

    新年伊始,英巴卡迪诺公司(Embarcadero)就在其官网发布了"激动人心的RAD Studio2018年发展规划"公告(见上图).公告中指出,将在于2018年第一季度发布10. ...

  5. Android Native App自动化测试实战讲解(上)(基于python)

    1.Native App自动化测试及Appuim框架介绍 android平台提供了一个基于java语言的测试框架uiautomator,它一个测试的Java库,包含了创建UI测试的各种API和执行自动 ...

  6. bzoj 3166 [Heoi2013]Alo 可持久化Trie

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1227  Solved: 569[Submit][Status ...

  7. bzoj 2120 带修改莫队

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 7340  Solved: 2982[Submit][Status][Discuss] ...

  8. SpringMvc解决Restful中文乱码问题

    中文乱码问题解决方式: <!-- 解决中文乱码问题 --> <filter> <filter-name>CharacterEncodingFilter</fi ...

  9. java10 - 泛型与枚举

    java10泛型与枚举 泛型和枚举都是JDK1.5版本之后加入的新特性,泛型将程序代码的类型检查提前到了编译期间进行,枚举类型增强了程序代码的健壮性. 1.泛型类 class VariableType ...

  10. 关于Properties类常用的操作

    import java.io.*;import java.util.Enumeration;import java.util.Properties;/** * 关于Properties类常用的操作 * ...