×

你的App(iOS)几秒钟完成启动?

96
尹_路人
2016.07.26 17:40* 字数 169
  • main.m

      #import <UIKit/UIKit.h>
      #import "AppDelegate.h"
      
      extern CFAbsoluteTime StartTime;
      
      int main(int argc, char * argv[]) {
          StartTime = CFAbsoluteTimeGetCurrent();
          NSLog(@"开始启动---->%f",StartTime);
          ...
      }
    

    CFAbsoluteTime StartTime;
    extern CFAbsoluteTime StartTime;

    <u>:声明全局变量StartTime需要** extern ** 关键词修饰,否则外部文件访问不到。</u>

  • AppDelegate.m

      #import "AppDelegate.h"
      
      CFAbsoluteTime StartTime;
      
      @implementation AppDelegate
      
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
        dispatch_async(dispatch_get_main_queue(), ^{
          NSLog(@"完成启动---->%f", CFAbsoluteTimeGetCurrent());
          NSLog(@"启动用时---->%f",CFAbsoluteTimeGetCurrent()-StartTime);
        });
        
        ...
      }  
    
  • 原理解释: 这个dispatch_async中提交的工作会在app主线程启动后的下一个run lopp中运行,此时app已经完成了载入并且将要显示第一帧画面,也就是系统会运行到-[UIApplication _reportAppLaunchFinished]之前

iOS-Develop
Web note ad 1