AJ学IOS(22)UI之UIApplicationDelegate和UIWindow
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的更多相关文章
- AJ学IOS(28)UI之Quartz2D简单介绍
AJ分享,必须精品 iOS开发UI篇—Quartz2D简单介绍 什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : ...
- AJ学IOS(13)UI之UITableView学习(下)汽车名牌带右侧索引
AJ分享,必须精品 先看效果图 代码 ViewController #import "NYViewController.h" #import "NYCarGroup.h& ...
- AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController
AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...
- AJ学IOS(01) UI之Hello World与加法计算器
不多说,AJ分享,必须精品 这两个一个是HelloWorld(左边) 另一个是 加法计算器(右边)的截图. 先运行第一个 程序看看效果 1.打开Xcode(没有哦mac系统的没有xcode的帮你们默哀 ...
- AJ学IOS(42)UI之核心动画CAAnimationGroup以及其他
AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent * ...
- AJ学IOS(23)UI之控制器管理
AJ分享,必须精品 控制器以及view的多种创建方式 控制器view的加载 通过storyboard创建 1:先加载storyboard⽂件(Test是storyboard的⽂文件名) UIStory ...
- AJ学IOS(08)UI之热门_喜马拉雅UI实现-UIScrollView的使用
AJ分享,必须精品 先看效果 storyBoard用到的控件 代码实现 */ // // NYViewController.m // 05 - 喜马拉雅 // // Created by apple ...
- AJ学IOS(04)UI之半小时搞定Tom猫
AJ分享 必须精品 效果图 曾经风靡一时的tom猫其实制作起来那是叫一个相当的easy啊 功能全部实现,(关键是素材,没有素材的可以加我微信) 新手也可以很快的完成tom这个很拉轰的ios应用哦 然 ...
- AJ学IOS(41)UI之核心动画 两行代码搞定3D转场
AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...
随机推荐
- 信号与系统实验序章0——MATLAB基础命令入门
本次开启新的系列,关于用Matlab实现常见信号和函数的生成和变换. 同时如果没有MATLAB基础,那么可以跟着本文一步一步学习Matlab的相关操作,本文旨在记录在信号与系统课程中MATLAB的学习 ...
- ArrayList,HashSet,SortedSet之间的区别是什么?
今天看Redis官方案例,出现了列表和集合概念,列表在Java中指的就是List,集合在Java中指的就是Set,那么怎么实现列表和集合,以及它们有什么区别呢? 我写了个Demo演示下: import ...
- editplus软件使用技巧
1.文本文件的特点 注:不针对editplus这个软件,对于其他的文本文件处理软件也同样适用. 文本文件就是不包含其它文字格式(比如字体,字号,对齐,行间距等)以及富文本(比如图片,表格等)的一种纯文 ...
- [暴力枚举]Codeforces Vanya and Label
Vanya and Label time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 使用PyTorch建立你的第一个文本分类模型
概述 学习如何使用PyTorch执行文本分类 理解解决文本分类时所涉及的要点 学习使用包填充(Pack Padding)特性 介绍 我总是使用最先进的架构来在一些比赛提交模型结果.得益于PyTorch ...
- 关于TensorFlow九件你非知不可的事
来源 | Hackernoon 译者 | Revolver 前些天我参加了7 月24 日在美国旧金山举行的Google Cloud Next 2018 大会,其中的一个演讲( What's New w ...
- CISP-PTE学习记录-大纲(1)
大纲内容记录 Linux操作系统安全 Windows操作系统安全 数据库安全 Web安全基础 HHTP协议 注入漏洞 XSS漏洞 请求伪造 文件处理漏洞 访问控制漏洞 会话管理漏洞 实战练习 中间件 ...
- SpringCloud服务的注册发现--------consul实现服务与发现
1,consul也可以替代Eureka实现注册和发现的功能,即注册中心. 之前在linux环境通过consul + upsync + nginx 实现nginx 的动态负载均衡 https://www ...
- ADB 调试
1.adb简介 adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...
- Activiti组任务
一.Candidate-users候选人 1.需求 在流程定义中在任务节点的assignee固定设置任务负责人,在流程定义时将参数者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义 ...