【程序启动四大对象】UIApplicationDelegate & 程序启动过程

A.概念

1.移动app非常容易受到其他的系统、软件事件的干扰,如来电、锁屏

2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件

3.delegate可以处理的事件

(1)app声明周期(启动、关闭)

(2)系统事件(来电)

(3)紧急事件(内存警告)

B.使用

称为delegate的条件:遵守UIApplicationDelegate协议

项目开始会自动创建:AppDelegate

1.delegate方法

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     NSLog(@"app启动完毕的时候调用");
 3     return YES;
 4 }
 5
 6 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
 7     NSLog(@"app接收到内存警告时调用");
 8 }
 9
10 - (void)applicationDidEnterBackground:(UIApplication *)application {
11     NSLog(@"app进入后台的时候调用");
12 }
13
14 - (void)applicationWillResignActive:(UIApplication *)application {
15     NSLog(@"app将要被挂起");
16 }
17
18 - (void)applicationWillEnterForeground:(UIApplication *)application {
19     NSLog(@"app回到前台");
20 }
21
22 - (void)applicationDidBecomeActive:(UIApplication *)application {
23     NSLog(@"app激活后");
24 }
25
26 - (void)applicationWillTerminate:(UIApplication *)application {
27     NSLog(@"app将要关闭");
28 }
29  

(1)一般的app操作触发delegate代理监听事件流程:

(2)整个app的启动过程:

2.main函数中调用的UIApplicationMain函数

1 int main(int argc, char * argv[]) {
2     @autoreleasepool {
3         return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
4     }
5 }

函数定义:

UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

(1)principalClassName

a.Application类名,必须是UIApplication或者其子类的类名

b.如果是nil,则默认是UIApplication

c.UIApplicationMain函数根据principalClassName创建UIApplication对象

(2)delegateClassName

a.delegate类名,此类必须遵守UIApplicationDelegate协议

b.UIApplicationMain函数根据delegateClassName创建一个delegate,并将其赋值给UIApplication的delegate属性

(3)进入Main Runloop 事件循环,使用delegate对事件进行监听

(4)程序正常退出,UIApplicationMain函数返回

时间: 2024-08-02 07:01:24

【程序启动四大对象】UIApplicationDelegate & 程序启动过程的相关文章

【程序启动四大对象】UIWindow

A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindow,不能显示任何东西 B.使用 1.创建一个Empty Application项目 没有了storyboard,要手动实现UIWindow的创建代码(其实这就是storyboard做的事情) 1 // 手动创建UIWindow,并加到screen上 2 self.window = [[UIWindo

程序启动原理(四大对象)

程序启动四大对象(UIApplication,AppDelegate) 一.UIApplication 1.什么是UIApplication? •UIApplication对象是应用程序的象征 •每一个应用都有自己的UIApplication对象,而且是单例的 •通过[UIApplication sharedApplication]可以获得这个单例对象 •一个iOS程序启动后创建的第一个对象就是UIApplication对象 •利用UIApplication对象,能进行一些应用级别的操作 2.U

excel不能启动此对象的源应用程序

不能启动此对象的源应用程序 案例: 某公司有文员使用CAD2006划图然后将图纸复制粘贴到excel 2007当中,因公司发展需要,把CAD2006升级到CAD2008版本后,excel2007中原先做好的图纸文档打不开,会提示"不能启动此对象的源应用程序",图例: 原因: 这是因为不同版本的AutoCAD使用不同的注册表项来连接OLE对象的服务器程序.当对应版本的软件没有安装时,容器程序便无法找到OLE服务程序. 本例中电脑安装的是AutoCAD2008的版本,而图纸是用AutoCA

kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。

最近一段时间在使用Kindle商城时总是会出现“应用程序出错,无法启动选定的应用程序,请重试.” 对此我花了大约一小时的时间进行测试验证并与客服人员沟通,将过程记录如下,供出现同样问题的朋友们参考. 冒烟测试的流程: Kindle 型号:paperwhite3  固件版本 5.9.7 操作流程:唤醒首页面->点击商城->浏览分类->小说->选择<围城>进入到商品详情页面->>点击返回,页面卡顿片刻后系统提示“应用程序错误”. 多次测验均可稳定复现. 初步怀疑

android intent隐式调用之一个应用程序启动另一个应用程序(转载)

理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似:另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合.另外Intent除了发送外,还可用于广播. 显示调用 1.Intent intent = new Intent(); intent.setClass(A.this,B.c

Android应用程序在新的进程中启动新的Activity的方法和过程分析

Android应用程序在新的进程中启动新的Activity的方法和过程分析 - 老罗的Android之旅 - 博客频道 - CSDN.NET ? ? ? ?前面我们在分析Activity启动过程的时候,看到同一个应用程序的Activity一般都是在同一个进程中启动,事实上,Activity也可以像Service一样在新的进程中启动,这样,一个应用程序就可以跨越好几个进程了,本文就分析一下在新的进程中启动Activity的方法和过程. ?? ? ? ?在前面Android进程间通信(IPC)机制B

在Visual Studio中快速启动调试Web应用程序

原文:http://blog.csdn.net/effun/article/details/2638535 从2003到2005,Visual Studio在启动调试的功能上进行了一些改善,不过因为只是简单的一个F5键,很多人可能都不会注意.其实也已经不是很记得清楚在2003启动调试是什么样的问题,因为已经有两年多没用了,只是依稀记得每启动一次就会打开一个新的IE窗口.因为打开IE是需要耗费一点时间的,所以总在寻求一个办法减少这个过程所消耗的时间. 后来2005来了,这个问题被有效地解决了.VS

在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用

原文:在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用 问题描述 在传统的基于 .NET Framework 的 WPF 程序中,我们可以使用如下代码段启动相关的默认应用: # 启动默认文本编辑器打开 helloworld.txt Process.Start("helloworld.txt"); # 启动默认浏览器打开 https://hippiezhou.fun/ Process.Start("https://hippiezhou.fun/"

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装、添加程序管理脚本、设置开机启动、反向代理配置、证书分发、添加iptables规则等

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装.添加程序管理脚本.设置开机启动.反向代理配置.证书分发.添加iptables规则等.脚本支持自定义nginx安装版本.设置编译模块.配置监听端口等. 1. Nginx Role规则说明 本脚本用于中间节点(Nginx反向代理)环境的自动化配置,主要内容包括: 安装基础依赖环境: 创建nginx启动用户(支持自定义用户): 下载nginx安装文件(可自定义nginx版本): 解压安装文件: 执行编译安装(可自定义编译参数和