iOS基本功iOS接下来要研究的知识点

iOS 性能优化三

2020-08-21  本文已影响0人  飞不越疯人院

主要讲解APP冷启动的优化

iOS 性能优化一
iOS 性能优化二
iOS 性能优化三


1. APP 启动的分类

冷启动: 从零开始, 点击 APP加载;
热启动: APP 已经在内存中, 再次点击图标后加载;
我们常说的APP启动优化主要是针对冷启动;
通过在xcode 中添加环境变量可以打印出启动的时间;
Edit scheme -> Run -> Environment Variables 添加DYLD_PRINT_STATISTICS 值为1
启动后就会打印启动信息;
执行main函数之前的时间:

Total pre-main time: 567.86 milliseconds (100.0%)
         dylib loading time: 153.19 milliseconds (26.9%)
        rebase/binding time: 229.51 milliseconds (40.4%)
            ObjC setup time: 135.73 milliseconds (23.9%)
           initializer time:  49.28 milliseconds (8.6%)
           slowest intializers :
             libSystem.B.dylib :   6.81 milliseconds (1.1%)
    libMainThreadChecker.dylib :  29.43 milliseconds (5.1%)

DYLD_PRINT_STATISTICS改为DYLD_PRINT_STATISTICS_DETAILS可以打印更加详细的信息;

2. APP 冷启动经历哪些阶段

点击 APP 图标到加载成功经历大概三个阶段;

3. 优化启动时间

针对上面的分析APP启动过程中做了那些操作, 可以优化APP的启动时间

补充

1. runtime 入口的objc_init方法
/***********************************************************************
* _objc_init
* Bootstrap initialization. Registers our image notifier with dyld.
* Called by libSystem BEFORE library initialization time
**********************************************************************/

void _objc_init(void)
{
    static bool initialized = false;
    if (initialized) return;
    initialized = true;
    
    // fixme defer initialization until an objc-using image is found?
    environ_init();
    tls_init();
    static_init();
    runtime_init();
    exception_init();
    cache_init();
    _imp_implementationWithBlock_init();
    _dyld_objc_notify_register(&map_images, load_images, unmap_image);
#if __OBJC2__
    didCallDyldNotifyRegister = true;
#endif
}
上一篇下一篇

猜你喜欢

热点阅读