AJ分享,必须精品

UIApplicationDelegate

每次新建完项目,都有个带有“AppDelegate”字眼的类,它就是UIApplication的代理

NYAppDelegate默认已经遵守了UIApplicationDelegate协议,已经 是UIApplication的代理

UIApplication和delegate的关系

iOS程序的启动过程

程序启动的完整过程
1.main函数

2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
* 创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

UIApplicationMain参数

main函数中执行了一个UIApplicationMain这个函数

int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([NYAppDelegate class]));
}
}
intUIApplicationMain(intargc,char*argv[],NSString
*principalClassName, NSString *delegateClassName);
argc、argv:直接传递给UIApplicationMain进⾏相关处理即可

principalClassName:指定应⽤用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值

UIApplicationMain函数的执行过程

UIApplicationMain函数会根据principalClassName创建UIApplication对象,根 据delegateClassName创建⼀个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性,接着会建立应⽤程序的Main Runloop(事件循环),进⾏行事件的处理(首先会在程序完毕后调 ⽤delegate对象的application:didFinishLaunchingWithOptions:⽅法)程序正常退出时UIApplicationMain函数才返回。

UIWindow

UIWindow是⼀种特殊的UIView,通常在⼀个app中只会有⼀个UIWindow 。

iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显⽰示在屏幕上了。

一个iOS程序之所以能显⽰示到屏幕上,完全是因为它有UIWindow。

也就说,没有UIWindow,就看不见任何UI界⾯。

添加UIView到UIWindow中两种常见⽅方式

直接将view添加到UIWindow中,但并不会理会view对应的UIViewController

-(void)addSubview:(UIView*)view;

自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的⽣命周期

@property(nonatomic,retain)UIViewController*rootViewController;

UIWindow常用方法

 -(void)makeKeyWindow;// 让当前UIWindow变成keyWindow(主窗口)
-(void)makeKeyAndVisible;// 让当前UIWindow变成keyWindow,并显示出来

UIWindow的获得

在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象 (平时输入文字弹出的键盘,就处在一个新的UIWindow中)

[UIApplicationsharedApplication].windows

⽤来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一 个UIWindow是keyWindow。如果某个UIWindow内部的文本框不能输⼊文字,可能是因为这 个UIWindow不是keyWindow

[UIApplicationsharedApplication].keyWindow

获得某个UIView所在的UIWindow

view.window

四⼤对象关系图

AJ学IOS(22)UI之UIApplicationDelegate和UIWindow的更多相关文章

  1. AJ学IOS(28)UI之Quartz2D简单介绍

    AJ分享,必须精品 iOS开发UI篇—Quartz2D简单介绍 什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : ...

  2. AJ学IOS(13)UI之UITableView学习(下)汽车名牌带右侧索引

    AJ分享,必须精品 先看效果图 代码 ViewController #import "NYViewController.h" #import "NYCarGroup.h& ...

  3. AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

    AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...

  4. AJ学IOS(01) UI之Hello World与加法计算器

    不多说,AJ分享,必须精品 这两个一个是HelloWorld(左边) 另一个是 加法计算器(右边)的截图. 先运行第一个 程序看看效果 1.打开Xcode(没有哦mac系统的没有xcode的帮你们默哀 ...

  5. AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他

    AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ...

  6. AJ学IOS(23)UI之控制器管理

    AJ分享,必须精品 控制器以及view的多种创建方式 控制器view的加载 通过storyboard创建 1:先加载storyboard⽂件(Test是storyboard的⽂文件名) UIStory ...

  7. AJ学IOS(08)UI之热门_喜马拉雅UI实现-UIScrollView的使用

    AJ分享,必须精品 先看效果 storyBoard用到的控件 代码实现 */ // // NYViewController.m // 05 - 喜马拉雅 // // Created by apple ...

  8. AJ学IOS(04)UI之半小时搞定Tom猫

    AJ分享 必须精品  效果图 曾经风靡一时的tom猫其实制作起来那是叫一个相当的easy啊 功能全部实现,(关键是素材,没有素材的可以加我微信) 新手也可以很快的完成tom这个很拉轰的ios应用哦 然 ...

  9. AJ学IOS(41)UI之核心动画 两行代码搞定3D转场

    AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...

随机推荐

  1. Java 借助poi操作PDF工具类

    ​ 一直以来说写一个关于Java操作PDF的工具类,也没有时间去写,今天抽空写一个简单的工具类,拥有PDF中 换行,字体大小,字体设置,字体颜色,首行缩进,居中,居左,居右,增加新一页等功能,如果需要 ...

  2. Swift5.2 新特性

    Print 函数传参新格式 let param = "参数" print(#"这是一个\#(param) xxxxx"#) 允许在模块中定义和标准库中名称一样的 ...

  3. 性能计数器在.NET Core中的新玩法

    传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于Perfor ...

  4. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  5. 【python系统学习11】循环语句里的F4

    循环语句里的F4 深入了解下四个新语句,分别是:continue.break.pass.else以及他们搭配for.while循环等语句时,所产生的化学反应. else 由于continue.brea ...

  6. TCP连接与HTTP请求

    一道经典面试题: 从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式.什么顺 ...

  7. Conda安装包错误-CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/r/win-64/repodata.json> Elapsed:

    可能是防火墙问题:conda config --set ssl_verify false 安装 openssl . 换源: cmd输入conda config --add channels r 进入C ...

  8. 模块 configparser 配置文件生成修改

    此模块用于生成和修改常见配置文档 1.来看一个好多软件的常见配置文件格式如下***.ini [DEFAULT] ServerAliveInterval = 45 Compression = yes C ...

  9. Activiti组任务

    一.Candidate-users候选人 1.需求 在流程定义中在任务节点的assignee固定设置任务负责人,在流程定义时将参数者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义 ...

  10. CSAPP实验——DataLab

    任务:按照要求补充13个函数,会限制你能使用的操作及数量 bitXor(x,y) 只使用 ~ 和 & 实现 ^ tmin() 返回最小补码 isTmax(x) 判断是否是补码最大值 allOd ...