美文网首页
App启动过程之main函数之后的启动过程分析

App启动过程之main函数之后的启动过程分析

作者: 舒小妮儿 | 来源:发表于2018-04-11 15:53 被阅读17次

关于这方面的文章,网上有很多了,但还是想从点滴积累,写下自己的理解,才能真正转化为属于自己的东西

从一个project来看应用启动过程,简单点可以以main函数为分水岭,分为main函数之前和main函数之后两个过程。之前看过唐巧的博客有很深入介绍main函数之前的启动过程分析。但我想先从简单的main函数之后的执行分析,关于main函数之前,app启动做了那些操作,计划下次掌握的更透彻了在来写文章记录下自己的分析和理解。

下面是大家都很熟悉的main.m文件,简单的几行代码,却包含了main函数开始,app启动执行的好几项操作呢~

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

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

很显然,main()函数只做了一件事,那就是调用UIApplicationMain()函数,接下来还是先了解下UIApplicationMain()函数吧~

/**
 * UIApplicationMain()函数剖析:
 *
 * 一、UIApplicationMain()函数负责:
 * 1、创建应用程序对象UIApplication
 * 2、创建应用程序代理AppDelegate
 * 3、开启事件循环Main RunLoop,delegate对象监听系统事件通知application对象
 *
 * 二、关于UIApplication​Main()的参数
 * 1、前两个参数是命令行参数。
 * 2、principalClassName: 该参数为 UIApplication 类名或其子类名的字符串,nil 是默认为 UIApplication。
 * 3、delegateClassName: 该参数为要初始化的应用程序代理(AppDelegate)类,也可指定为 nil,但需要从应用程序的主 nib 文件加载代理对象。
 *
 * 三、UIApplication​Main()函数返回值
 * 虽然该函数有返回值,但从不返回
 *
 **/
int UIApplicationMain(int argc, char * _Nonnull argv[], NSString *principalClassName, NSString *delegateClassName); 

至此UIApplicationMain方法执行完成,程序启动完毕,开始调用Application的delegate方法处理监听到的事件。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
}

- (void)applicationWillTerminate:(UIApplication *)application {
}

application:didFinishLaunchingWithOptions:方法内,会创建并设置应用的UIWindow和UIWindow的rootVC,并显示窗口。
接下来,就会根据读取的info.plist文件,看是否需要加载Main.storyboard文件设置UIWindow。

综上,main函数之后app启动的完整过程为:

1、执行main函数
2、执行UIApplicationMain函数 (执行和完成流程详见UIApplicationMain()函数剖析)
3、UIApplicationDelegate对象开始处理监听到的事件

相关文章

  • iOS App启动过程的探究

    探究App的启动过程,有助于我们优化App的启动时间,从main函数之前和main函数之后两个阶段进行分析一下。 ...

  • iOS APP启动过程与优化

    1.APP从桌面的icon被点击到app启动,详尽过程描述 app的启动可以分为main函数之前跟main函数之后...

  • App启动过程之main函数之后的启动过程分析

    关于这方面的文章,网上有很多了,但还是想从点滴积累,写下自己的理解,才能真正转化为属于自己的东西 从一个proje...

  • iOS App启动原理解析

    此文主要从Main函数之后分析;最后会从启动时间优化上分析main函数前后 1、App启动入口Main 在创建一个...

  • iOS App启动流程

    iOS的App启动一般有两个过程,发生在main函数前的过程和main函数之后的过程。 main函数前 App开始...

  • iOS基础总结-1

    1、APP启动流程 APP一启动,便首先调用main函数,main函数会调用UIApplicationMain函数...

  • 点击App以后

    App启动的完整过程 main函数 UIApplicationMain函数 创建UIApplication对象 创...

  • 启动优化

    项目APP的启动优化分为两个阶段:main()函数之前 、main()函数之后 1、main()函数之前优化:...

  • 启动优化 二进制重排

    一、启动优化 冷启动:第一次启动App热启动 启动优化一般讲的是冷启动 启动阶段:main函数之前、main函数之...

  • iOS项目启动及启动时间优化:

    项目启动: 看下app的启动入口Main函数: int main(int argc, char * argv[])...

网友评论

      本文标题:App启动过程之main函数之后的启动过程分析

      本文链接:https://www.haomeiwen.com/subject/jlinhftx.html