我正在为iOS应用程序编写一个插件包(我将为您提供详细信息)。加载我的捆绑包时,主要应用程序包加载时不一定是这样,我希望得到"正常运行时间"以秒(或更高)分辨率的过程。
我知道在其他操作系统(Unix / Linux / Android)中我可以枚举kinfo_proc
或使用/proc/self/stat
方法,但我无法实现来自iOS应用程序沙箱的目标。
我可以使用一些标准的系统调用/ NSProcessInfo
属性吗?
这个目的主要用于调试,但它可能会变成一个功能。因此,首选符合AppStore条件的方法,但不是强制性的。
答案 0 :(得分:4)
您可以使用[[NSProcessInfo processInfo] processIdentifier]
获取PID,然后使用sysctl
获取unix开始时间。
我实际上在OS上找到了另一个关于同一问题的答案,仅在OSX:Is there any way to get the application's run time in Cocoa for OS X?
#include <sys/sysctl.h>
#include <sys/types.h>
pid_t pid = [[NSProcessInfo processInfo] processIdentifier];
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
struct kinfo_proc proc;
size_t size = sizeof(proc);
sysctl(mib, 4, &proc, &size, NULL, 0);
NSDate *startTime = [NSDate dateWithTimeIntervalSince1970:proc.kp_proc.p_starttime.tv_sec];
NSLog(@"Process start time for PID:%d is %@", pid, startTime);
我不确定App Store的资格,但这对我在模拟器和设备上都有效。试着提交并告诉我们?