美文网首页
iOS应用启动及优化点

iOS应用启动及优化点

作者: 顺其自然2017 | 来源:发表于2019-11-17 16:51 被阅读0次

    在iOS系统中,APP的启动分为两种,我将其称之为全加载启动和缓存启动

    1.全加载启动,即在iOS系统中没有该APP进程存在,一切都需要重新开始

    2.缓存启动,即在iOS系统中存在改APP进程,需要唤醒APP进入前台工作

    程序启动耗时获取

    在 Xcode 导航栏中 Edit scheme -> Run -> Auguments 将环境变量 DYLD_PRINT_STATISTICS设为 YES即可

    启动时间图

    dylib loading time 动态库加载时间

    rebase/binding time 重定向地址绑定外部指针时间

    ObjC setup time  OC等类设置时间

    initializer time 初始化时间

    slowest intializers 最慢初始化模块


    这里我们只介绍全加载启动

    全加载启动分为两个部分预加载初始化

    预加载:

    1.获取APP plist配置文件,读取配置信息

    2.创建运行沙盒,每次启动,沙盒内存位置都不相同(地址空间布局随机化机制 ASLR)

    3.检查plist文件申请的权限信息

    4.加载可执行文件Mach-O

    5.读取动态链接器路径,运行动态链接器

    6.使用动态链接器加载直接或者间接依赖的动态库

        6.1 验证动态库有效性和代码签名,读取到内核,链接动态库

        6.2 重定向动态库地址(ASLR), 查询符号表绑定外部指针(I/O 与CPU计算耗时)

        6.3 启动运行时runtime,维护类和方法表,注册类、分类、结构体,指定每个方法名的唯一性

        6.4 初始化OC、C++,调用+load方法,构造器函数(attribute((constructor))修饰),创建非基本类型的C++静态全局变量

    初始化:

    1.main 函数

    2.执行UIApplicationMain

        2.1 创建UIApplication对象

        2.2 创建UIApplication的delegate对象

        2.3 创建MainRunloop主循环

        2.4 delegate监听处理系统事件

    3.程序启动完毕,调用App生命周期启动回调方法

        3.1 配置需要用到的第三方库

        3.2 创建展示UIWindow

        3.3 创建和设置UIWindow的根视图控制器rootViewController

    4.最终显示UI


    启动优化:

    经过以上APP启动分析,可以优化的着手点如下

    1.删减无用的类、资源文件,减少资源文件大小

    2.删减不必要的依赖库,减少动态库的引用

    3.确定库的引用方式,减少额外的检查

    4.减少项目文件中分类、类别的使用以及静态变量的使用数量

    5.初始化库和工具,如非必要,异步执行

    6.UI实现尽量使用纯代码,减少xib等文件的使用(xib等文件需要转换为纯代码,耗费时间)。

    相关文章

      网友评论

          本文标题:iOS应用启动及优化点

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