你的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