ios应用启动流程
来源:互联网 发布:网络伤感男歌手排行榜 编辑:程序博客网 时间:2024/05/12 02:46
应用启动流程
首先,与传统C语言一样,IOS应用的执行入口也是定义在main.m
中的main
函数,代码如下
#import <UIKit/UIKit.h>#import "AppDelegate.h"int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }}
这段代码只干了一件事情——调用UIApplicationMain
并返回。那么,这个UIApplicationMain
又完成了什么工作呢?
UIApplicationMain
的声明如下:
int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName );
Apple官方文档描述如下:
This function is called in the main entry point to create the application object and the application delegate and set up the event cycle.
也就是说这个作为在ios应用入口点被调用的函数主要做了两件事情,一是创建了UIApplication
实例和UIApplicationDelegate
实例,二是建立了事件循环用来接收系统事件。
接下来,它又通过UIApplication
调用UIApplication
的委托对象UIApplicationDelegate
的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法初始化UIWindow
和相应地根试图控制器并显示在屏幕上。
总结一下就是:
- 用户点击应用图标
- 系统调用
main
函数 main
函数调用UIApplicationMain
函数UIApplication
建立时间循环并创建UIApplication
和UIApplicationDelegate
实例- 由
UIApplication
调用其委托对象UIApplicationDelegate
的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法完成视图初始化并将视图显示在屏幕上
用一张图片表示或许会更直观一些:
UIApplication
上面提到了UIApplication
类,并且UIApplicationMain
函数的第三个参数也是一个UIApplication
类的名称,那么这个UIApplication
类又发挥什么样的作用呢?
这个UIApplication
类其实就是整个应用的控制中心,由它负责协调应用中各对象的运行、交互。
严格来说,每个应用内有且只有一个UIApplication
类(不过可以是UIApplication
的子类),这个类的对象由UIApplicationMain
函数进行创建,并且只会有一个(单例模式)。我们可以通过下面的方法得到它的实例对象:
UIApplication * application = [UIApplication sharedApplication];
UIApplication
主要完成如下工作:
- 接收由事件循环送来的消息,并将消息分发到相应对象
- 管理视图,包括控制视图的显示、行为等
- 负责本地通知的创建和管理
- 该对象有一个
Appdelegate
委托对象,当一些重要的系统时间或生命周期事件(如应用程序启动、进入后台、收到低内存警告)发生时,应用程序通知该UIApplication
,然后由UIApplication
交由它的委托对象处理。
UIApplicationDelegate
在上面的UIApplicationMain
函数的声明中,第四个参数就是一个UIApplicationDelegate
类的名称,UIApplicationMain
就是根据第三、四个参数提供的名称进行实例化UIApplication
和UIApplicationDelegate
对象并让UIApplicationDelegate
成为UIApplication
的委托对象。
不过要注意的一点就是
UIApplicationDelegate
是一个协议而不是类
UIApplicationDelegate
协议定义了一坨(请原谅我的量词(⊙o⊙))方法(UIApplicationDelegate
中定义的方法都是有UIApplication
对象调用)用来处理在整个应用的生命周期中的一些重要的事件(比如应用程序启动,状态切换等等)。
这样,通过自己实现相应方法就可以对应用的一些重要事件进行自定义的处理(UIApplicationMain
与UIApplication
一般来说不能够也不需要进行自定义,不过UIApplication
可以自定义子类,但是一般情况下不需要)。比如实现跟应用启动有关的方法就可以自定义应用启动流程,实现与应用状态切换的方法就可以自定义应用从前台进入后台或从后台进入前台时的行为。
其中,跟应用启动有关的方法有如下一些:
/*应用开始启动但是状态还未恢复时调用此方法*/- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)/*应用启动完成并且应用已经开始运行时调用此方法,一般在这个方法内进行应用窗口、视图的初始化*/- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions/*当应用处于前台并且能够接收消息时调用这个方法*/- (void)applicationDidBecomeActive:(UIApplication *)application
把UIApplicationDelegate
的方法调用与IOS应用的启动流程图结合来看应该会更加直观一些
- ios应用启动流程
- IOS应用的启动流程及其调用关系
- 应用的启动流程
- android应用启动流程
- Android应用启动流程
- Android 应用启动流程
- SpringBoot应用启动流程
- SpringBoot应用启动流程
- ios程序启动流程
- IOS程序启动流程
- IOS启动动流程
- iOS App启动流程
- iOS启动流程
- iOS App启动流程
- iOS App启动流程
- ios 应用 开发流程。。。
- ios应用发布流程
- iOS应用发布流程
- 由system.currentTimeMillis() 获得当前的时间
- Address already in use: JVM_Bind 问题
- Sensor HAL框架分析之二
- 设计模式笔记(二)--策略模式、观察者模式
- 四轴飞行器F450+Futaba 14SG+好盈电调油门行程校准
- ios应用启动流程
- 设计模式-抽象工厂模式
- [水晶报表]金额转英文大写
- jason解析
- Observer Pattern
- iOS7对UITableViewCell的层级改变
- STM32的NVIC理解
- hdu 1213 How Many Tables 并查集
- 由液压马达计算匹配的泵与电机