iOS APP启动时间定位

  • APP启动时间(t)分为两部分,一部分为main 函数启动之前的时间(t1),另一部分为main函数启动之后的时间(t2)。
  1. t1:系统dylib动态链接库和自身APP可执行文件的加载;
  2. main方法执行后到AppDelegate中的- (BOOL)Application: (UIApplication *)Application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 方法执行结束前的时间,主要是构建并展示首个界面。
  • t2的时间是可以同过异步绘制,延迟加载等方式减少didFinishLaunchingWithOptions 中的时间消耗进行优化,但是t1的时间如何优化呢?其实xcode已经为我们准备好了,真机调试时候勾选DYLD_PRINT_STATISTICS选项,会打印main 函数之前时间占用。
    环境变量配置

    如下是一个空项目dyld 耗时,根据耗时可以针对性进行优化。
Total pre-main time: 153.53 milliseconds (100.0%)
         dylib loading time:  46.41 milliseconds (30.2%)
        rebase/binding time: 126687488.9 seconds (418075601.5%)
            ObjC setup time:  15.32 milliseconds (9.9%)
           initializer time: 125.28 milliseconds (81.6%)
           slowest intializers :
             libSystem.B.dylib :  10.40 milliseconds (6.7%)
   libBacktraceRecording.dylib :   5.40 milliseconds (3.5%)
    libMainThreadChecker.dylib : 103.50 milliseconds (67.4%)

除了DYLD_PRINT_STATISTICS 还提供了其他环境变量 如下:

变量 说明
DYLD_PRINT_STATISTICS 1 Print launch performance statistics 打印启动时间等参数
DYLD_PRINT_SEGMENTS 1 Log segment mapping
DYLD_PRINT_INITIALIZERS 1 Log image initialization calls
DYLD_PRINT_BINDINGS 1 Log symbol bindings
DYLD_PRINT_APIS 1 Log dyld API calls (for example, dlopen)
DYLD_PRINT_ENV 1 Print launch-time environment variables
DYLD_PRINT_OPTS 1 Print launch-time command line arguments
DYLD_PRINT_LIBRARIES_POST_LAUNCH 1 Log library loads , but only after main has run
DYLD_PRINT_LIBRARIES 1 Log library loads
DYLD_IMAGE_SUFFIX 1 Search for libraries with this suffix first

参见苹果官方文档

你可能感兴趣的:(iOS APP启动时间定位)