如何确定Cocoa(OS X)应用程序的启动时间

Jon*_*kas 3 macos cocoa objective-c

我正在为OS X编写一个应用程序,我需要从日志中获取消息以发送回我们的服务器进行分析/故障排除.我知道我可以使用Apple系统日志(ASL)功能来获得我想要的功能,但是只想获取当前会话的日志消息.我可以在AppDelegate init方法中占用时间:

    // now minus one second
    NSDate *startTime = [NSDate dateWithTimeIntervalSinceNow:-1];
Run Code Online (Sandbox Code Playgroud)

但是想知道系统是否可以更准确地记录应用程序的启动时间.我查看了NSProcessInfo,但没有看到任何相关内容.有没有办法确定一个进程的开始时间,而不仅仅是在应用程序本身记录时间?

das*_*ght 7

我没有Mac方便验证这是否适用于OS X,但C标准库提供clock()<time.h>标题中的功能,可以与CLOCKS_PER_SEC您一起使用以获得自程序启动以来经过的秒数.

编辑

无论你在什么时候调用它,这都应该让你在程序启动后的一秒钟内得到时间:

NSDate *startTime = [NSDate dateWithTimeIntervalSinceNow:-clock()/CLOCKS_PER_SEC];
Run Code Online (Sandbox Code Playgroud)

  • @AndrewMadsen那*是*clock()`的作用 - 根据链接的文档,它"返回自程序启动以来经过的时钟周期数." 但这个名称具有误导性. (2认同)