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

作者: 尹_路人 | 来源:发表于2016-07-26 17:40 被阅读367次
  • 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]之前

相关文章

网友评论

  • 花色衬衫:报错
    在 AppDelegate.m CFAbsoluteTime StartTime;
    在main.m CFAbsoluteTime StartTime;
    这两个是同一个吗? 以为这两个是一样的 所以报错
    linker command failed with exit code 1(use -v to see invocation)
    尹_路人:@花色衬衫 在main.m中声明StartTime需要 extern 关键词修饰,否则外部文件访问不到
    文章已更新,多谢批评指正

本文标题:你的App(iOS)几秒钟完成启动?

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