美文网首页
iOS 程序启动过程

iOS 程序启动过程

作者: jasperWhf | 来源:发表于2019-08-18 22:15 被阅读0次

一次面试中问到,这里看到梳理比较好的文章记录一下。

概述

我们一般说的 APP 的启动是从 main 函数开始的,但在 main 函数执行前,程序已经执行了许多事情。

main 函数执行前

程序会做一系列的初始化工作,动态加载依赖库

1:首先当程序启动时,系统会读取程序的可执行文件(mach-o), 从里面获取动态加载器(dylb)的路径;

2:加载dylb,dylb会初始化运行环境,配合ImageLoader将二进制文件加载到内存中去;

3:动态链接依赖库, 初始化依赖库,初始化runtime;

4:runtime会对项目中的所有类进行类结构初始化,调用所有的load方法;

5:最后dylb会返回main函数地址,main函数被调用,进入程序入口

main 函数执行后

main 函数代码分析 :

int main(int argc, char * argv[]){ @autoreleasepool {returnUIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegateclass])); }}

UIApplicationMain函数有四个参数

int argc: 表示参数的个数

char * _Nonnull * _Null_unspecified argv: 表示装载函数的数组

NSString * _Nullable principalClassName: 表示UIApplication类名或子类,若为 nil,则默认使用UIApplication类名

NSString * _Nullable delegateClassName: 表示协议UIApplicationDelegate的实例化对象名,这个类就是我们熟悉的AppDelegate

main 函数执行顺序

1:内部会调用UIApplicationMain函数,创建一个UIApplication对象和它的代理,就是我们项目中的Appdelegate类

2:开启一个事件循环(main runloop), 监听系统事件

3:程序启动完毕时,通知代理Appdelegate, 调用didFinishLaunching代理方法,在这里会创建UIWindow,设置它的rootViewController,

4:最后调用self.window makeKeyAndVisable显示窗口

启动时间优化

上面简单描述了程序启动的整个过程,分为 main 函数执行前和执行后,所以优化启动时间也可从两个方面着手

 一、 main 函数前的时间优化

1:合并功能类似的类和扩展,由于分类和 oc 的动态绑定有很大关系,所以要尽量减少多余的分类

2:移除不需要的动态库,减少动态库的数量,因为链接动态库是需要时间的,在自己pod工具库的时候,工具库最好是能合并到一个里面,不要弄太多的类。

二、 main 函数后的时间优化

1:这和我们的代码逻辑书写有很大关系,它的执行顺序为 main -> didFinishLanuching -> window、rootViewController -> 获取数据 -> 显示页面

2:这个优化的核心就是,少在Appdelegate中写太多代码,一些耗时的操作尽量不要再这里操作,能延迟初始化的,就延迟,不能延迟的就放到后台

3:页面布局逻辑:先显示界面,给一个默认状态视图,等数据请求完毕后再刷新界面,这样比等数据请求完整财显示界面看起来更加时间快。

相关文章

  • 深入理解iOS App的启动过程

    前言 参考资料:深入理解iOS App的启动过程iOS 应用程序启动过程及原理总结iOS:App启动过程详解(不同...

  • iOS 程序 main函数之前发生什么

    主要参考:iOS程序启动->dyld加载->runtime初始化 过程iOS 程序 main 函数之前发生了什么 ...

  • iOS程序启动原理(下)

    接上篇 iOS程序启动原理(上) 下图是一个iOS程序启动的完整过程 main函数中执行了一个UIApplicat...

  • iOS程序启动-Dyld流程解析

    iOS程序启动流程概览 什么是Dyld? 它跟程序的启动有什么关系? Dyld是动态库链接器。在程序启动过程中负责...

  • UI部分-程序概要

    iOS程序概要 1. 程序的启动过程 iOS程序就是从main函数开始执行的,但是在main函数中我们其实只能看到...

  • iOS 程序启动过程

    概述 我们一般说的 APP 的启动是从 main 函数开始的,但在 main 函数执行前,程序已经执行了许多事情 ...

  • iOS程序启动过程

    程序启动的完整过程 1.main函数 2.UIApplicationMain * 创建UIApplication对...

  • iOS程序启动过程

    1.main函数。 2.UIApplicationMain · 创建UIApplication对象 ·创建UIAp...

  • IOS 程序启动过程

    应用程序启动过程: 找到main.m 文件 执行main函数 执行UIApplicationMain()函数 实例...

  • iOS程序启动过程

    一、启动完整过程 1.main函数main.m 2.UIApplicationMain 创建UIApplicati...

网友评论

      本文标题:iOS 程序启动过程

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