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. 两个奇技淫巧,将 Docker 镜像体积减小 99%

    原文链接:Docker Images : Part I - Reducing Image Size 对于刚接触容器的人来说,他们很容易被自己构建的 Docker 镜像体积吓到,我只需要一个几 MB 的 ...

  2. CVE-2019-3396:Confluence未授权模板注入_代码执行

    title: Confluence未授权模板注入/代码执行(CVE-2019-3396) tags: [poc,cve] 简介 Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企 ...

  3. 全国职业技能大赛信息安全管理与评估-第三阶段-弱口令自动爆破+读取Flag脚本

    自动爆破SSH弱口令+读取Flag #coding=utf-8 import paramiko sshc = paramiko.SSHClient() sshc.set_missing_host_ke ...

  4. canvas绘制流星雨特效

    源码: <!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta n ...

  5. Selenium系列(四) - 鼠标、键盘操作详细解读

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. Python字符串及基本操作(入门必看)

    基础入门的知识一直没有更新完,今天小张接着给大家带来入门级的字符串的常用操作.本文适合刚入门的小白,大佬们请绕过. 一.定义 字符串的意思就是“一串字符”,比如“Hello,Charlie”是一个字符 ...

  7. DL 调参经验

    2019-10-20 11:45:54 数据侧 1.在数据集很大的情况下,不要立马跑全量数据.可以现在小数据集上进行测试,估算一下运行时间. 2.数据shuffle和augmentation,训练之前 ...

  8. OpenCV-Python 轨迹栏作为调色板 | 九

    目标 了解将轨迹栏固定到OpenCV窗口 您将学习以下功能:cv.getTrackbarPos,cv.createTrackbar等. 代码演示 在这里,我们将创建一个简单的应用程序,以显示您指定的颜 ...

  9. coding++ :Layui-监听事件

    在使用layui的form表单做验证提交的时候,如果结合vue,或者是三级联动的时候,就需要做事件监听了. 具体语法: form.on('event(过滤器值)', callback); 可以用于监听 ...

  10. C#通用类库整理--序列化类

    程序员在编写应用程序的时候往往要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上 以实现通讯.这个将程序数据转化成能被存储并传输的格式的过程被称为"序列 ...