iOS核心笔记——iOS应用程序启动原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS核心笔记——iOS应用程序启动原理相关的知识,希望对你有一定的参考价值。
1、ios应用程序启动示例图:
2、应用程序启动原理:
2-1、不通过storyboard文件启动:
- 执行main函数;
- 执行main函数中的UIApplicationMain函数,创建UIApplication对象,创建ApplicationDelegate对象并将其设置为UIApplication对象的代理;
- 程序启动完毕,开启消息循环(Main RunLoop)、监听事件并调用注册方法;接着调用代理的
application:didFinishLaunchingWithOptions:
方法;在该方法中手动创建UIWindow对象设置为代理的window属性;- 创建控制器,将控制器设置为window的根控制器(rootViewController),此时,控制器中的View会自动加载到window上;
- 将创建好的window设置为主窗口并显示(调用window的
makeKeyAndVisible
方法)。
示例程序:
1./**
2. 应用程序启动完毕
3. */
4.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
5. // 1. 创建窗口
6. UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
7. self.window = window;
8.
9. // 2. 创建窗口的根控制器
10. UIViewController *vc = [[UIViewController alloc] init];
11. vc.view.backgroundColor = [UIColor redColor];
12. self.window.rootViewController = vc;
13.
14. // 3. 成为主窗口并显示
15. [self.window makeKeyAndVisible];
16.
17. return YES;
18.}
2-2、通过storyboard文件启动:
官方文档解释说明:
- 执行main函数;
- 执行main函数中的UIApplicationMain函数,创建UIApplication对象,创建ApplicationDelegate对象并将其设置为UIApplication对象的代理;
- 自动创建好UIWindow对象;
- 检索info.plist文件中最重要的storyboard(通常为Main storyboard)信息,根据info.plist提供的信息,加载storyboard文件,自动创建好控制器和控制器的View;
- 将创建好的控制器设置为window对象的根控制器(rootViewController)并显示窗口。
- 应用程序启动后,会开启应用程序的Main Runloop(事件循环),监听事件并调用注册的方法(首先会在程序完毕后调用delegate对象的
application:didFinishLaunchingWithOptions:
方法);
3、UIApplicationMain()函数:
官方文档解释说明:
3-1、UIApplicationMain()参数使用说明:
argc
:使用main函数中的argc即可;
argv
:使用main函数的argv即可;
-
principalClassName
:指定应用程序类名(app的象征),该类必须是UIApplication(或子类),如果为nil,则用UIApplication类作为默认值;备注
:传入应用程序对象类名,nil
==NSStringFromClass([UIApplication class])
==@"UIApplication"
。 delegateClassName
:指定应用程序的代理类,UIApplicationDelegate协议中定义的方法,在该类中实现。
3-2、UIApplicationMain()功能:
- 根据principalClassName创建UIApplication对象;
- 根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性;
UIApplicationMain()
函数开启一个“死循环”(事件循环), 所以程序不会退出, 我们可以任意使用。在这个“死循环”(事件循环)中程序不断监听用户的各种事件, 依次处理(依靠”事件队列”实现)。
备注
:在消息循环中不断监测消息队列
中是否有新的事件(队列是先进先出,事件队列的目的是为了提高性能),消息循环可以简单理解为一个死循环;当系统有事件被触发,事件所执行的方法会放入消息队列中,消息循环的作用就是不停的去消息 队列中看有没有新的消息,有就执行,用户感觉不到等待的时间。
3-3、UIApplicationMain()函数退出:
备注
:程序正常退出时UIApplicationMain函数才返回。
4、程序启动四大对象关系示例图:
以上是关于iOS核心笔记——iOS应用程序启动原理的主要内容,如果未能解决你的问题,请参考以下文章