美文网首页
面试题:APP启动优化

面试题:APP启动优化

作者: 常在士心 | 来源:发表于2021-08-29 08:38 被阅读0次

    一、APP启动分为冷启动和热启动

        1、冷启动 - APP从0-1的启动
    
        2、热启动 - APP在后再运行启动
    

    二、APP冷启动三大阶段

        1、dyld
    
               dyld是APP的动态链接器,可用来装载Mach-o文件,那么启动APP的时候dyld做了那些事呢?首先装载APP可执行文件,递归加载所有依赖的动态库,然后通知Runtime执行下一步处理
    
        2、Runtime
    
              调用map_images进行可执行文件内容的解析和处理,在load_images中调用call_load_methods来调用所有的class、category的+load方法,然后注册objc,初始化对象,调用c++静态初始化和attribute修饰函数
    
        3、main
    
            APP启动由dyld主导,将可执行文件加载到内存,同时加载所有动态依赖库,由Runtime加载成为objc定义的结构,初始化结束之后dyld才会调用main函数,然后进入AppDelegate的application: didFinishLaunchingWithOptions:方法
    

    三、APP启动优化

        1、dyld阶段:减少动态库,合并一下动态库,减少objc类、分类的数量、减少selector数量(如定期清理不必要的库、类、分类已经不使用的方法),减少c++虚函数
    
        2、Runtime阶段:用+initialize和dispatch_once取代所有的_attribute_、c++静态构造器、objc的+load
    
        3、main阶段:在不影响业务和用户体验的情况下将延时操作放在application: didFinishLaunchingWithOptions:方法之后
    

    四、共享缓存机制

        1、每个程序依赖的动态库都要通过dyld一个一个加载到内存中,大部分的系统库几乎每个程序都会用到,每个程序运行都去加载一次,这样就会很慢,如此就引入了共享缓存机制
    
        2、将所有默认的动态链接库和并成一个大的缓存文件,按不同文件分别保存
    

    相关文章

      网友评论

          本文标题:面试题:APP启动优化

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