UIApplication和delegate代理
所有的移动操作系统都有个致命的缺点:app很容易受到打扰,比如一个来电或者锁屏都会导致app进入后台甚至被终止
还有很多其他类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这是UIApplication会通知他的delegate对象 让delegate对象来处理这些系统事件
常用的代理方法
@implementation AppDelegate /**
* 程序启动完毕就会调用
*/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES;
} /**
* 程序将要失去焦点的时候调用
*/
- (void)applicationWillResignActive:(UIApplication *)application { } /**
* 程序进入后台的时候就会调用 一般在这里保存应用数据
*/
- (void)applicationDidEnterBackground:(UIApplication *)application { } /**
* 程序进入前台就会调用
*/
- (void)applicationWillEnterForeground:(UIApplication *)application { } /**
* 程序接收到内存警告时调用 一般在这里清楚不需要再使用的内存
*/
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{ } /**
* 被激活 获取到焦点的时候调用
*/
- (void)applicationDidBecomeActive:(UIApplication *)application { } @end
delegate:可以处理的系统事件包括:
- 应用程序的生命周期事件 比如程序的启动和关闭
- 系统事件 比如来电
- 内存警告
应用程序一启动首先创建的第一个对象就是UIApplication
UIApplication是应用程序的象征 当我们创建一个项目时:系统已经帮我自动创建了代理 :AppDelegate
应用程序的启动过程:
探究UIApplicationMain
main函数中执⾏行了⼀一个UIApplicationMain这个函数 • int UIApplicationMain(int argc, char *argv[], NSString
- principalClassName, NSString *delegateClassName);
➢ argc、argv:直接传递给UIApplicationMain进⾏行相关处理即可 - principalClassName:指定应⽤用程序类名(app的象征),该类必须是UIApplication(或
⼦子类)。如果为nil,则⽤用UIApplication类作为默认值 - delegateClassName:指定应⽤用程序的代理类,该类必须遵守UIApplicationDelegate协
议
- 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界面
程序启动的完整过程
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 为箭头所指向的控制器
* 显示窗口
UIApplication和delegate代理的更多相关文章
- iOS开发之UIApplication和delegate
1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统 ...
- 【iOS [[UIApplication sharedApplication] delegate]】运用
之前想要拿到app的窗口,我们通常的写法是: [UIApplication sharedApplication].keyWindow 这种写法之前一直也觉得是正确的,没什么问题,而且网上大多数的博客或 ...
- iOS阶段学习第30天笔记( UIViewController—Delegate(代理) )
iOS学习(UI)知识点整理 一.UIViewController的介绍 1)概念:UIViewController 即视图控制器,用来管理和控制页面跳转的一个类 ,iOS里面采用了MVC的体系结构, ...
- Delegate(代理)异常:该委托必须有一个目标
转自 Delegate(代理)异常:该委托必须有一个目标 在代理调用BeginInvoke(new AsyncCallback(callBack), null);时,会抛这个异常的原因是该代理变量代理 ...
- OC中APPDelegate[[UIApplication shareApplication]delegate]]Swift实现
直接上代码: var myDelegate:AppDelegate? myDelegate = UIApplication.sharedApplication().delegate as? AppDe ...
- [UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]区别
参考链接:https://www.cnblogs.com/henusyj-1314/p/11643189.html 结论1.在获取到window时最好使用[[UIApplication sharedA ...
- View 与 Controller 之间的delegate(代理)传值
这个代理传值是经常使用的一种传值方式,下面介绍一种View 和 Controller 之间的代理传值方法. 先建立一个View视图 如 LoginView 是继承于一个UIView 在LoginVie ...
- 关于delegate(代理)总结
stackoverflow 上讲解:http://stackoverflow.com/a/12660523/4563358 delegate是将需要处理交给自己的代理. 在自己的对应的类中.h文件中 ...
- Block作为property属性实现页面之间传值(代替Delegate代理与协议结合的方法)
需求:在ViewController中,点击Button,push到下一个页面NextViewController,在NextViewController的输入框TextField中输入一串字符,返回 ...
随机推荐
- C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法
你QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法: 要么重写需要弹出的窗体的事件: protected override CreateParams ...
- (ETW) Event Tracing for Windows 入门 (含pdf下载)
内容提纲 • ETW 介绍 • ETW 使用 • ETW 监控本机Demo • ETW 监控远程机器的思路 • 底层类库:EventSource 介绍 • 底层类库:TraceEvent 介绍 ETW ...
- db2 表授权语句
grant insert/update/delete on table schema.table_name to user user_name;
- Objective-c中定义成员变量
ios定义成员变量的方法: 如果只是内部访问,完全可以直接用_xxx(下划线),无需自己定义,编译器会自动生成 如果需要外部访问这个变量,可以用 @property xxx ; @synthesize ...
- 常用天气预报API接口整理(转)
文章转自:http://www.nohacks.cn/post-35.html 自序: 由nohacks.cn 收集整理,来源于网络,版权归原作者所有,基本收集了网络上能使用的大部分天气API接口,作 ...
- word2007二级标题自动编号不从大标题开始的解决方法
今天在编写word文档的时候,遇到一个很奇怪的问题,word2007二级标题自动编号不从大标题开始,可能我说的比较模糊,我截个图大家一看就明白了. 我想要的是2.1 2.2结果,他确是从1.1开始了. ...
- SecureCRT的快捷键
快捷键,有时比笨拙的方式,要效率高很多,近期经常和Linux打交道,用到SecureCRT,这里就从网上找到部分快捷方式,作为日后查看,以防经常查找. Alt + Enter -- 全屏Alt + B ...
- Java 反射练习
已同步更新至个人blog:http://dxjia.cn/2015/08/java-reflect/ 引用baidubaike上对JAVA反射的说明,如下:JAVA反射机制是在运行状态中,对于任意一个 ...
- 同时大量连接导致的DDOS攻击,导致收发器宕机,用户大面积超时掉线
前段时间一个客户改成电信网通自动路由后(当然和这个没有关系,但是客户一般没有分析能力,会多想),用户经常大面积掉线,用户才180多个,在线最多也才120多,十分苦恼,原先帮其维护的技术人员,只是远程诊 ...
- Java模式(适配器模式)【转载】
转载地址: http://blog.csdn.net/elegant_shadow/article/details/5006175 今天看了下Java中的适配器模式,以下就来小做下总结和谈谈感想,以便 ...